diff options
author | Youngsang Cho <youngsang@google.com> | 2014-05-14 16:08:13 +0900 |
---|---|---|
committer | Youngsang Cho <youngsang@google.com> | 2014-05-14 17:35:54 +0900 |
commit | c0dbe65141bbf5abe42f77ccda21f9bc44f69b48 (patch) | |
tree | 8d2507cd40a7438f89f933de94c6b406983ba93f /src/com/android/tv | |
parent | 1d1c6be51dc3a1cdf0cc027a920cc01e4aea1ac7 (diff) | |
download | TV-c0dbe65141bbf5abe42f77ccda21f9bc44f69b48.tar.gz |
Make a common method to start auto-scaning channels
Plus, it includes minor refactoring.
Bug: 14728142
Change-Id: Ia68f4df92990c300e675b06448cfd7927d6c2d65
Diffstat (limited to 'src/com/android/tv')
-rw-r--r-- | src/com/android/tv/InputPickerDialogFragment.java | 4 | ||||
-rw-r--r-- | src/com/android/tv/PackageIntentsReceiver.java | 3 | ||||
-rw-r--r-- | src/com/android/tv/TvActivity.java | 115 | ||||
-rw-r--r-- | src/com/android/tv/Utils.java | 55 | ||||
-rw-r--r-- | src/com/android/tv/menu/MenuDialogFragment.java | 68 |
5 files changed, 117 insertions, 128 deletions
diff --git a/src/com/android/tv/InputPickerDialogFragment.java b/src/com/android/tv/InputPickerDialogFragment.java index f568003f..7e4bb04d 100644 --- a/src/com/android/tv/InputPickerDialogFragment.java +++ b/src/com/android/tv/InputPickerDialogFragment.java @@ -200,7 +200,7 @@ public class InputPickerDialogFragment extends DialogFragment { public void onClick(DialogInterface dialog, int which) { TvInputInfo input = mInputMap.get(mAdapter.getItem(which)); // If the unified TV input is selected, input will be null. - mListener.onInputPicked(input, mAdapter.getItem(which)); + mListener.onInputPicked(input); } }) .setNeutralButton(R.string.edit_input_device_name, @@ -245,6 +245,6 @@ public class InputPickerDialogFragment extends DialogFragment { } public interface InputPickerDialogListener { - public void onInputPicked(TvInputInfo input, String displayName); + public void onInputPicked(TvInputInfo input); } } diff --git a/src/com/android/tv/PackageIntentsReceiver.java b/src/com/android/tv/PackageIntentsReceiver.java index 9145fba3..bd51ee57 100644 --- a/src/com/android/tv/PackageIntentsReceiver.java +++ b/src/com/android/tv/PackageIntentsReceiver.java @@ -1,15 +1,12 @@ package com.android.tv; import android.content.BroadcastReceiver; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; -import android.provider.TvContract; import android.tv.TvInputInfo; import android.tv.TvInputManager; -import android.util.Log; import java.util.HashSet; import java.util.List; diff --git a/src/com/android/tv/TvActivity.java b/src/com/android/tv/TvActivity.java index 5f5bfd8e..23ed9e2e 100644 --- a/src/com/android/tv/TvActivity.java +++ b/src/com/android/tv/TvActivity.java @@ -26,8 +26,6 @@ import android.app.FragmentTransaction; import android.content.ContentUris; import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; import android.database.ContentObserver; import android.graphics.Point; import android.media.AudioManager; @@ -60,7 +58,6 @@ import com.android.tv.menu.MenuDialogFragment; import java.util.Collection; import java.util.HashSet; -import java.util.List; /** * The main activity for demonstrating TV app. @@ -380,37 +377,9 @@ public class TvActivity extends Activity implements super.onStop(); } - public void showEditChannelsDialog() { - if (mTvInputInfo == null) { - return; - } - - EditChannelsDialogFragment f = new EditChannelsDialogFragment(); - Bundle arg = new Bundle(); - arg.putParcelable(EditChannelsDialogFragment.ARG_CURRENT_INPUT, mTvInputInfo); - arg.putBoolean(EditChannelsDialogFragment.ARG_IS_UNIFIED_TV_INPUT, mIsUnifiedTvInput); - f.setArguments(arg); - - showDialogFragment(EditChannelsDialogFragment.DIALOG_TAG, f); - } - - public void showInputPickerDialog() { - InputPickerDialogFragment f = new InputPickerDialogFragment(); - Bundle arg = new Bundle(); - if (mTvInputInfo != null) { - arg.putString(InputPickerDialogFragment.ARG_MAIN_INPUT_ID, mTvInputInfo.getId()); - arg.putBoolean(InputPickerDialogFragment.ARG_IS_UNIFIED_TV_INPUT, mIsUnifiedTvInput); - } - if (mPipInputInfo != null) { - arg.putString(InputPickerDialogFragment.ARG_SUB_INPUT_ID, mPipInputInfo.getId()); - } - f.setArguments(arg); - showDialogFragment(InputPickerDialogFragment.DIALOG_TAG, f); - } - @Override - public void onInputPicked(TvInputInfo selectedTvInput, final String displayName) { - if (selectedTvInput == null) { + public void onInputPicked(TvInputInfo input) { + if (input == null) { // For unified TV input. if (mIsUnifiedTvInput) { return; @@ -428,19 +397,17 @@ public class TvActivity extends Activity implements return; } else { // Restart session to re-create the channel map. - selectedTvInput = mTvInputInfo; + input = mTvInputInfo; } } else { - if (mTvSession != null && selectedTvInput.equals(mTvInputInfo) && !mIsUnifiedTvInput) { + if (mTvSession != null && input.equals(mTvInputInfo) && !mIsUnifiedTvInput) { // Nothing has changed thus nothing to do. return; } mIsUnifiedTvInput = false; - if (!Utils.hasChannel(this, selectedTvInput, false)) { + if (!Utils.hasChannel(this, input, false)) { mTvInputInfoForSetup = null; - if (showSetupActivity(selectedTvInput, displayName)) { - stopSession(); - } + startSetupActivity(input); return; } } @@ -455,39 +422,58 @@ public class TvActivity extends Activity implements } catch (InterruptedException e) { e.printStackTrace(); } - startSession(selectedTvInput); + startSession(input); } - private boolean showSetupActivity(TvInputInfo inputInfo, String displayName) { - PackageManager pm = getPackageManager(); - List<ResolveInfo> activityInfos = pm.queryIntentActivities( - new Intent(Utils.ACTION_SETUP), PackageManager.GET_ACTIVITIES); - ResolveInfo setupActivity = null; - if (activityInfos != null) { - for (ResolveInfo info : activityInfos) { - if (info.activityInfo.packageName.equals(inputInfo.getPackageName())) { - setupActivity = info; - } - } + public void showEditChannelsDialog() { + if (mTvInputInfo == null) { + return; + } + + EditChannelsDialogFragment f = new EditChannelsDialogFragment(); + Bundle arg = new Bundle(); + arg.putParcelable(EditChannelsDialogFragment.ARG_CURRENT_INPUT, mTvInputInfo); + arg.putBoolean(EditChannelsDialogFragment.ARG_IS_UNIFIED_TV_INPUT, mIsUnifiedTvInput); + f.setArguments(arg); + + showDialogFragment(EditChannelsDialogFragment.DIALOG_TAG, f); + } + + public void showInputPickerDialog() { + InputPickerDialogFragment f = new InputPickerDialogFragment(); + Bundle arg = new Bundle(); + if (mTvInputInfo != null) { + arg.putString(InputPickerDialogFragment.ARG_MAIN_INPUT_ID, mTvInputInfo.getId()); + arg.putBoolean(InputPickerDialogFragment.ARG_IS_UNIFIED_TV_INPUT, mIsUnifiedTvInput); + } + if (mPipInputInfo != null) { + arg.putString(InputPickerDialogFragment.ARG_SUB_INPUT_ID, mPipInputInfo.getId()); + } + f.setArguments(arg); + showDialogFragment(InputPickerDialogFragment.DIALOG_TAG, f); + } + + public void startSettingsActivity() { + if (mTvInputInfo == null) { + Log.w(TAG, "mTvInputInfo is null in showSettingsActivity"); } + Utils.startActivity(this, mTvInputInfo, Utils.ACTION_SETTINGS); + } - if (setupActivity == null) { - String message = String.format(getString(R.string.input_setup_activity_not_found), - displayName); + public void startSetupActivity(TvInputInfo input) { + if (Utils.startActivityForResult(this, input, Utils.ACTION_SETUP, + REQUEST_START_SETUP_ACTIIVTY)) { + mTvInputInfoForSetup = input; + stopSession(); + } else { + String displayName = Utils.getDisplayNameForInput(this, input); + String message = String.format(getString( + R.string.input_setup_activity_not_found), displayName); new AlertDialog.Builder(this) .setMessage(message) .setPositiveButton(R.string.OK, null) .show(); - return false; } - - mTvInputInfoForSetup = inputInfo; - Intent intent = new Intent(Utils.ACTION_SETUP); - intent.setClassName(setupActivity.activityInfo.packageName, - setupActivity.activityInfo.name); - startActivityForResult(intent, REQUEST_START_SETUP_ACTIIVTY); - - return true; } @Override @@ -704,8 +690,7 @@ public class TvActivity extends Activity implements } private String getFormattedTimeString(long time) { - return (String) DateFormat.format( - (CharSequence) getString(R.string.channel_banner_time_format), time); + return DateFormat.format(getString(R.string.channel_banner_time_format), time).toString(); } private void displayChannelBanner() { diff --git a/src/com/android/tv/Utils.java b/src/com/android/tv/Utils.java index 032a02d8..fb915ca4 100644 --- a/src/com/android/tv/Utils.java +++ b/src/com/android/tv/Utils.java @@ -16,11 +16,15 @@ package com.android.tv; +import android.app.Activity; import android.content.ComponentName; import android.content.ContentUris; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.database.Cursor; import android.net.Uri; import android.preference.PreferenceManager; @@ -29,6 +33,8 @@ import android.text.TextUtils; import android.tv.TvInputInfo; import android.util.Base64; +import java.util.List; + /** * A class that includes convenience methods for accessing TvProvider database. */ @@ -178,6 +184,55 @@ public class Utils { info.loadLabel(pm).toString()); } + public static boolean hasActivity(Context context, TvInputInfo input, String action) { + return getActivityInfo(context, input, action) != null; + } + + public static boolean startActivity(Context context, TvInputInfo input, String action) { + ActivityInfo activityInfo = getActivityInfo(context, input, action); + if (activityInfo == null) { + return false; + } + + Intent intent = new Intent(action); + intent.setClassName(activityInfo.packageName, activityInfo.name); + intent.putExtra(Utils.EXTRA_SERVICE_NAME, input.getServiceName()); + context.startActivity(intent); + return true; + } + + public static boolean startActivityForResult(Activity activity, TvInputInfo input, + String action, int requestCode) { + ActivityInfo activityInfo = getActivityInfo(activity, input, action); + if (activityInfo == null) { + return false; + } + + Intent intent = new Intent(Utils.ACTION_SETUP); + intent.setClassName(activityInfo.packageName, activityInfo.name); + activity.startActivityForResult(intent, requestCode); + return true; + } + + private static ActivityInfo getActivityInfo(Context context, TvInputInfo input, String action) { + if (input == null) { + return null; + } + + List<ResolveInfo> infos = context.getPackageManager().queryIntentActivities( + new Intent(action), PackageManager.GET_ACTIVITIES); + if (infos == null) { + return null; + } + + for (ResolveInfo info : infos) { + if (info.activityInfo.packageName.equals(input.getPackageName())) { + return info.activityInfo; + } + } + return null; + } + private static long getChannelId(Uri channelUri) { if (channelUri == null) { return Channel.INVALID_ID; diff --git a/src/com/android/tv/menu/MenuDialogFragment.java b/src/com/android/tv/menu/MenuDialogFragment.java index bae83f5c..4bd24c01 100644 --- a/src/com/android/tv/menu/MenuDialogFragment.java +++ b/src/com/android/tv/menu/MenuDialogFragment.java @@ -23,10 +23,6 @@ import android.app.Fragment; import android.app.FragmentTransaction; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; -import android.content.Intent; -import android.content.pm.ActivityInfo; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; import android.os.Bundle; import android.tv.TvInputInfo; import android.view.View; @@ -34,13 +30,10 @@ import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListAdapter; -import com.android.tv.InputPickerDialogFragment; import com.android.tv.R; import com.android.tv.TvActivity; import com.android.tv.Utils; -import java.util.List; - /** * The TV app's menu dialog. */ @@ -100,11 +93,15 @@ public final class MenuDialogFragment extends DialogFragment { case POSITION_EDIT_CHANNELS: return mCurrentInput != null; case POSITION_SETUP: - return getSetupActivityInfo() != null; + return !mIsUnifiedTvInput && mCurrentInput != null + && Utils.hasActivity(getContext(), + mCurrentInput, Utils.ACTION_SETUP); case POSITION_PIP: return PIP_MENU_ENABLED; case POSITION_SETTINGS: - return getSettingsActivityInfo() != null; + return !mIsUnifiedTvInput && mCurrentInput != null + && Utils.hasActivity(getContext(), + mCurrentInput, Utils.ACTION_SETTINGS); } return true; } @@ -125,7 +122,8 @@ public final class MenuDialogFragment extends DialogFragment { ((TvActivity) getActivity()).showEditChannelsDialog(); break; case POSITION_SETUP: - startSetupActivity(); + dismiss(); + ((TvActivity) getActivity()).startSetupActivity(mCurrentInput); break; case POSITION_PRIVACY: showDialogFragment(PrivacySettingDialogFragment.DIALOG_TAG, @@ -136,7 +134,8 @@ public final class MenuDialogFragment extends DialogFragment { activity.togglePipView(); break; case POSITION_SETTINGS: - startSettingsActivity(); + dismiss(); + ((TvActivity) getActivity()).startSettingsActivity(); break; } } @@ -155,51 +154,4 @@ public final class MenuDialogFragment extends DialogFragment { ft.addToBackStack(null); dialog.show(ft, tag); } - - private void startSetupActivity() { - startActivity(Utils.ACTION_SETUP); - } - - private void startSettingsActivity() { - startActivity(Utils.ACTION_SETTINGS); - } - - private void startActivity(String action) { - ActivityInfo info = getActivityInfo(action); - if (info == null) { - return; - } - - Intent intent = new Intent(action); - intent.setClassName(info.packageName, info.name); - intent.putExtra(Utils.EXTRA_SERVICE_NAME, mCurrentInput.getServiceName()); - startActivity(intent); - } - - private ActivityInfo getSetupActivityInfo() { - return getActivityInfo(Utils.ACTION_SETUP); - } - - private ActivityInfo getSettingsActivityInfo() { - return getActivityInfo(Utils.ACTION_SETTINGS); - } - - private ActivityInfo getActivityInfo(String action) { - if (mCurrentInput == null) { - return null; - } - - List<ResolveInfo> infos = getActivity().getPackageManager().queryIntentActivities( - new Intent(action), PackageManager.GET_ACTIVITIES); - if (infos == null) { - return null; - } - - for (ResolveInfo info : infos) { - if (info.activityInfo.packageName.equals(mCurrentInput.getPackageName())) { - return info.activityInfo; - } - } - return null; - } } |