From d6bb51406fa63d93bf634b64e9f115e49a9c9c29 Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Mon, 6 Dec 2010 15:42:03 -0800 Subject: Fixed bug in orientation change -The Fragment was missing an empty public constructor b/3257935 -Restructured some of the logic determining whether to show a dialog or an embedded view Change-Id: I42295ef88cd800b775ea6970c59c34cb46ca17d5 --- AndroidManifest.xml | 2 +- res/layout-xlarge/live_wallpaper_base.xml | 19 +++ res/layout/live_wallpaper_base.xml | 8 +- .../livepicker/LiveWallpaperActivity.java | 132 +++++++++++++++++++++ .../livepicker/LiveWallpaperListActivity.java | 132 --------------------- 5 files changed, 158 insertions(+), 135 deletions(-) create mode 100644 res/layout-xlarge/live_wallpaper_base.xml create mode 100644 src/com/android/wallpaper/livepicker/LiveWallpaperActivity.java delete mode 100644 src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 2d8ae50..6a5d677 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -31,7 +31,7 @@ android:label="@string/application_name" android:icon="@drawable/ic_launcher_live_wallpaper"> - + + + diff --git a/res/layout/live_wallpaper_base.xml b/res/layout/live_wallpaper_base.xml index 6803901..41cbdf1 100644 --- a/res/layout/live_wallpaper_base.xml +++ b/res/layout/live_wallpaper_base.xml @@ -15,6 +15,10 @@ --> + android:layout_height="match_parent"> + + diff --git a/src/com/android/wallpaper/livepicker/LiveWallpaperActivity.java b/src/com/android/wallpaper/livepicker/LiveWallpaperActivity.java new file mode 100644 index 0000000..130dcfa --- /dev/null +++ b/src/com/android/wallpaper/livepicker/LiveWallpaperActivity.java @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.wallpaper.livepicker; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.app.Fragment; +import android.app.WallpaperInfo; +import android.os.Bundle; +import android.content.DialogInterface; +import android.content.Intent; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; + +public class LiveWallpaperActivity extends Activity { + private static final String LOG_TAG = "LiveWallpapersPicker"; + private static final int REQUEST_PREVIEW = 100; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.live_wallpaper_base); + + Fragment fragmentView = getFragmentManager().findFragmentById(R.id.live_wallpaper_fragment); + if (fragmentView == null) { + /* When the screen is XLarge, the fragment is not included in the layout, so show it + * as a dialog + */ + DialogFragment fragment = WallpaperDialog.newInstance(); + fragment.show(getFragmentManager(), "dialog"); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == REQUEST_PREVIEW) { + if (resultCode == RESULT_OK) finish(); + } + } + + public static class WallpaperDialog extends DialogFragment implements + AdapterView.OnItemClickListener{ + private LiveWallpaperListAdapter mAdapter; + + public static WallpaperDialog newInstance() { + WallpaperDialog dialog = new WallpaperDialog(); + dialog.setCancelable(true); + return dialog; + } + + @Override + public void onDismiss(DialogInterface dialog) { + /* On orientation changes, the dialog is effectively "dismissed" so this is called + * when the activity is no longer associated with this dying dialog fragment. We + * should just safely ignore this case by checking if getActivity() returns null + */ + Activity activity = getActivity(); + if (activity != null) { + activity.finish(); + } + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + final int contentInset = getResources().getDimensionPixelSize( + R.dimen.dialog_content_inset); + View view = generateView(getActivity().getLayoutInflater(), null); + + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setNegativeButton(R.string.wallpaper_cancel, null); + builder.setTitle(R.string.live_wallpaper_picker_title); + builder.setView(view, contentInset, contentInset, contentInset, contentInset); + return builder.create(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + /* If this fragment is embedded in the layout of this activity, then we should + * generate a view to display. Otherwise, a dialog will be created in + * onCreateDialog() + */ + if (isInLayout()) { + return generateView(inflater, container); + } + return null; + } + + @SuppressWarnings("unchecked") + private View generateView(LayoutInflater inflater, ViewGroup container) { + View layout = inflater.inflate(R.layout.live_wallpaper_list, container, false); + + mAdapter = new LiveWallpaperListAdapter(getActivity()); + AdapterView adapterView = + (AdapterView) layout.findViewById(android.R.id.list); + adapterView.setAdapter(mAdapter); + adapterView.setOnItemClickListener(this); + adapterView.setEmptyView(layout.findViewById(android.R.id.empty)); + return layout; + } + + public void onItemClick(AdapterView parent, View view, int position, long id) { + LiveWallpaperListAdapter.LiveWallpaperInfo wallpaperInfo = + (LiveWallpaperListAdapter.LiveWallpaperInfo) mAdapter.getItem(position); + final Intent intent = wallpaperInfo.intent; + final WallpaperInfo info = wallpaperInfo.info; + LiveWallpaperPreview.showPreview(getActivity(), REQUEST_PREVIEW, intent, info); + } + } +} diff --git a/src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java b/src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java deleted file mode 100644 index c96e18c..0000000 --- a/src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.wallpaper.livepicker; - -import android.app.Activity; -import android.app.AlertDialog; -import android.app.Dialog; -import android.app.DialogFragment; -import android.app.FragmentTransaction; -import android.app.WallpaperInfo; -import android.os.Bundle; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.res.Configuration; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.BaseAdapter; - -public class LiveWallpaperListActivity extends Activity { - private static final String LOG_TAG = "LiveWallpapersPicker"; - private static final int REQUEST_PREVIEW = 100; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.live_wallpaper_base); - ViewGroup baseView = (ViewGroup) findViewById(R.id.live_wallpaper_base_view); - - boolean isXLarge = (getResources().getConfiguration().screenLayout - & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE; - - DialogFragment fragment = new WallpaperDialogFragment(this, baseView, !isXLarge); - if (isXLarge) { - // When the screen is XLarge - fragment.show(getFragmentManager(), "dialog"); - } else { - // When the screen is normal. i.e: a phone - FragmentTransaction ft = getFragmentManager().openTransaction(); - ft.add(R.id.live_wallpaper_base_view, fragment); - ft.commit(); - } - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - if (requestCode == REQUEST_PREVIEW) { - if (resultCode == RESULT_OK) finish(); - } - } - - private class WallpaperDialogFragment extends DialogFragment implements - AdapterView.OnItemClickListener{ - private Activity mActivity; - private LiveWallpaperListAdapter mAdapter; - private ViewGroup mBaseView; - private boolean mEmbedded; - - public WallpaperDialogFragment(Activity activity, ViewGroup baseView, boolean embedded) { - mActivity = activity; - mEmbedded = embedded; - mBaseView = baseView; - setCancelable(true); - } - - @Override - public void onDismiss(DialogInterface dialog) { - mActivity.finish(); - } - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - final int contentInset = getResources().getDimensionPixelSize( - R.dimen.dialog_content_inset); - View view = generateView(getLayoutInflater(), mBaseView); - - AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); - builder.setNegativeButton(R.string.wallpaper_cancel, null); - builder.setTitle(R.string.live_wallpaper_picker_title); - builder.setView(view, contentInset, contentInset, contentInset, contentInset); - return builder.create(); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - if (mEmbedded) { - return generateView(inflater, container); - } - return super.onCreateView(inflater, container, savedInstanceState); - } - - @SuppressWarnings("unchecked") - private View generateView(LayoutInflater inflater, ViewGroup container) { - View layout = inflater.inflate(R.layout.live_wallpaper_list, container, false); - - mAdapter = new LiveWallpaperListAdapter(mActivity); - AdapterView adapterView = - (AdapterView) layout.findViewById(android.R.id.list); - adapterView.setAdapter(mAdapter); - adapterView.setOnItemClickListener(this); - adapterView.setEmptyView(layout.findViewById(android.R.id.empty)); - return layout; - } - - public void onItemClick(AdapterView parent, View view, int position, long id) { - LiveWallpaperListAdapter.LiveWallpaperInfo wallpaperInfo = - (LiveWallpaperListAdapter.LiveWallpaperInfo) mAdapter.getItem(position); - final Intent intent = wallpaperInfo.intent; - final WallpaperInfo info = wallpaperInfo.info; - LiveWallpaperPreview.showPreview(mActivity, REQUEST_PREVIEW, intent, info); - } - } -} -- cgit v1.2.3