aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv
diff options
context:
space:
mode:
authorYoungsang Cho <youngsang@google.com>2014-05-14 16:08:13 +0900
committerYoungsang Cho <youngsang@google.com>2014-05-14 17:35:54 +0900
commitc0dbe65141bbf5abe42f77ccda21f9bc44f69b48 (patch)
tree8d2507cd40a7438f89f933de94c6b406983ba93f /src/com/android/tv
parent1d1c6be51dc3a1cdf0cc027a920cc01e4aea1ac7 (diff)
downloadTV-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.java4
-rw-r--r--src/com/android/tv/PackageIntentsReceiver.java3
-rw-r--r--src/com/android/tv/TvActivity.java115
-rw-r--r--src/com/android/tv/Utils.java55
-rw-r--r--src/com/android/tv/menu/MenuDialogFragment.java68
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;
- }
}