package com.iwedia.gui.components.dialogs;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.os.RemoteException;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import com.iwedia.comm.IScanCallback;
import com.iwedia.comm.content.Content;
import com.iwedia.comm.content.IContentListControl;
import com.iwedia.comm.enums.FilterType;
import com.iwedia.comm.enums.ServiceListIndex;
import com.iwedia.gui.MainActivity;
import com.iwedia.gui.R;
import com.iwedia.gui.components.A4TVAlertDialog;
import com.iwedia.gui.components.A4TVButton;
import com.iwedia.gui.components.A4TVDialog;
import com.iwedia.gui.components.A4TVProgressBar;
import com.iwedia.gui.components.A4TVProgressDialog;
import com.iwedia.gui.components.A4TVSpinner;
import com.iwedia.gui.components.A4TVTextView;
import com.iwedia.gui.components.A4TVToast;
import com.iwedia.gui.config_handler.ConfigHandler;
import com.iwedia.gui.content_list.ContentListHandler;
import com.iwedia.gui.listeners.MainKeyListener;
import com.iwedia.gui.osd.OSDGlobal;
import java.util.ArrayList;
/**
* Dialog for scanning procedure
*
* @author Branimir Pavlovic
*/
public class ChannelScanDialog extends A4TVDialog implements
A4TVDialogInterface, OnSeekBarChangeListener, OSDGlobal {
private final static String TAG = "ChannelScanDialog";
private Context ctx;
/** Fields for scanning procedure */
private A4TVProgressBar progressScan = null, progressSignalStrength = null,
progressSignalQuality = null;
// private static LinearLayout layoutToAddServices;
// private static HorizontalScrollView scrollView;
private int numberOfServices = 0, numberOfRadio = 0, numberOfData = 0;
private A4TVTextView servicesText, dataText, radioText;
private static boolean isScanning = false;
private A4TVTextView textTopBanner;
private LayoutInflater inflater;
private Handler handlerScanFinished;
private A4TVProgressDialog progressDialog;
private final int WIDTH_720p = 1280, HEIGHT_720p = 720, WIDTH_1080p = 1920,
HEIGHT_1080p = 1080, TIME_TO_SHOW_FTI_END_TEXT = 3000;
public static final String NO_IMAGE = "-1";
private int selectedTunerType;
private GridView gridViewForChannels;
private ChannelsGridAdapter gridAdapter;
private Content[] contentsForGridView = new Content[12];
private ArrayList<Content> contentsList = new ArrayList<Content>();
public static final int[] INDEX_LOOK_UP_TABLE = { 0, 6, 1, 7, 2, 8, 3, 9,
4, 10, 5, 11 };
// public static final int[] INDEX_LOOK_UP_TABLE = { 11, 5, 10, 4, 9, 3, 8,
// 2,
// 7, 1, 6, 0 };
private Animation animTranslate, animTranslateExit;
private A4TVTextView textViewScannedFrequncy;
public final static int SCAN_FINISHED_FLAG = 0, FOUND_SERVICE_FLAG = 1,
REFRESH_ADAPTER_FLAG = 2, SCANNED_FREQUENCY = 3,
NO_SERVICES_FOUND = 4, ERROR_OCCURED = 5, NO_SERVICE_SPACE = 6;
/** Filter options fields */
/** Array list of filter buttons */
private ArrayList<LinearLayout> filterButtons = new ArrayList<LinearLayout>();
/** Filter options ids */
public static final int FILTER_ALL_OPTION = 0;
public static final int FILTER_DVB_T_OPTION = 1;
public static final int FILTER_DVB_C_OPTION = 2;
public static final int FILTER_DVB_S_OPTION = 3;
public static final int FILTER_IP_OPTION = 4;
public static final int FILTER_ATV_OPTION = 5;
/** Available filter options */
private Boolean[] filterOptions = new Boolean[6];
/** Width measure unit */
private int widthMeasureUnit;
/** Width measure unit divider */
public static final int widthMeasureUnitDivider = 12;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
// Abort scan
case KeyEvent.KEYCODE_DEL:
case KeyEvent.KEYCODE_BACK: {
if (getTextTopBanner()
.getText()
.toString()
.equals(ctx
.getResources()
.getString(
R.string.tv_menu_channel_installation_settings_manual_tunning))) {
new A4TVToast(ctx)
.showToast(R.string.tv_menu_channel_installation_settings_manual_tunning_abort_not_supported);
} else {
new AbortScanTask().execute();
}
return true;
}
case KeyEvent.KEYCODE_INFO: {
if (isScanning) {
return super.onKeyDown(keyCode, event);
} else {
return true;
}
}
default: {
return true;
}
}
}
/** Constructor */
public ChannelScanDialog(Context context) {
super(context, checkTheme(context), 0);
ctx = context;
// disable menu button
setMenuButtonEnabled(false);
// check what tunner is selected
ChannelInstallationDialog chDialog = MainActivity.activity
.getDialogManager().getChannelInstallationDialog();
if (chDialog != null)
selectedTunerType = ((A4TVSpinner) chDialog
.findViewById(ChannelInstallationDialog.TV_MENU_CHANNEL_INSTALLATION_SETTINGS_TUNER_TYPE))
.getCHOOSEN_ITEM_INDEX();
// set content to dialog
fillDialog();
setDialogAttributes();
gridViewForChannels = (GridView) findViewById(R.id.allItemsGrid);
// Set number of columns
gridViewForChannels.setNumColumns(ContentListHandler.NUMBER_OF_COLUMNS);
gridViewForChannels.setVerticalScrollBarEnabled(false);
// Set up stretch mode for grid
gridViewForChannels.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);
// Attach adapter
gridAdapter = new ChannelsGridAdapter();
gridViewForChannels.setAdapter(gridAdapter);
// disable grid view
gridViewForChannels.setFocusable(false);
// get reference to text views
servicesText = (A4TVTextView) findViewById(R.id.aTVTextViewNumberOfServices);
radioText = (A4TVTextView) findViewById(R.id.aTVTextViewNumberOfRadioServices);
dataText = (A4TVTextView) findViewById(R.id.aTVTextViewNumberOfDataServices);
// get reference to progress
progressScan = (A4TVProgressBar) findViewById(R.id.aTVProgressBarScanProgress);
progressScan.setOnSeekBarChangeListener(this);
// disable progress changing manually
progressScan.setEnabled(false);
progressSignalQuality = (A4TVProgressBar) findViewById(R.id.aTVProgressBarSignalQualityIndicator);
progressSignalQuality.setOnSeekBarChangeListener(this);
// disable progress changing manually
progressSignalQuality.setEnabled(false);
progressSignalStrength = (A4TVProgressBar) findViewById(R.id.aTVProgressBarSignalStrengthIndicator);
progressSignalStrength.setOnSeekBarChangeListener(this);
// disable progress changing manually
progressSignalStrength.setEnabled(false);
textViewScannedFrequncy = (A4TVTextView) findViewById(R.id.aTVTextViewScannedFrequency);
textTopBanner = (A4TVTextView) findViewById(R.id.contentListTopBannerText);
// set text sizes
// textTopBanner.setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// textViewScannedFrequncy.setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// servicesText.setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// radioText.setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// dataText.setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// ((A4TVTextView) findViewById(R.id.aTVTextViewMoreInfo)).setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// ((A4TVTextView) findViewById(R.id.contentListRecentlyWatchedText))
// .setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources()
// .getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// ((A4TVTextView) findViewById(R.id.aTVTextViewFr)).setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// ((A4TVTextView) findViewById(R.id.aTVTextViewStr)).setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// ((A4TVTextView) findViewById(R.id.aTVTextViewQu)).setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// ((A4TVTextView) findViewById(R.id.aTVTextViewSc)).setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// ((A4TVTextView) findViewById(R.id.aTVTextViewNu)).setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// ((A4TVTextView) findViewById(R.id.aTVTextViewRa)).setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
// ((A4TVTextView) findViewById(R.id.aTVTextViewDa)).setTextSize(
// TypedValue.COMPLEX_UNIT_DIP,
// ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_list_banner_text_size));
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
handlerScanFinished = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == SCAN_FINISHED_FLAG) {
// hide and show dialogs
// Close scan dialog
isScanning = false;
Log.d(TAG, "handler scan finished entered");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
endScan(false);
}
}, 2500);
}
if (msg.what == FOUND_SERVICE_FLAG) {
// refresh number of services fields
servicesText.setText(numberOfServices + "");
// refresh number of radios
radioText.setText(numberOfRadio + "");
// Refresh number of data
dataText.setText(numberOfData + "");
}
if (msg.what == REFRESH_ADAPTER_FLAG) {
refreshAdapterData();
}
if (msg.what == SCANNED_FREQUENCY) {
if (getTextViewScannedFrequncy() != null) {
getTextViewScannedFrequncy().setText(
(String) msg.obj + " MHz");
}
}
if (msg.what == NO_SERVICES_FOUND) {
new A4TVToast(ctx)
.showToast(R.string.no_services_found_during_scan);
}
if (msg.what == NO_SERVICE_SPACE) {
new A4TVToast(ctx).showToast(R.string.no_service_space);
}
if (msg.what == ERROR_OCCURED) {
ChannelScanDialog.this.cancel();
resetViews();
// ////////////////////////////////////////////////
// Gallery unscaled and unrotated images bug fix
// ////////////////////////////////////////////////
Handler delay = new Handler();
delay.postDelayed(new Runnable() {
@Override
public void run() {
MainActivity.activity.getMainMenuHandler()
.getMainMenuDialog().cancel();
MainActivity.activity.getMainMenuHandler()
.getMainMenuDialog().show();
MainActivity.activity.getMainMenuHandler()
.getA4TVOnSelectLister()
.startAnimationsManual();
MainKeyListener
.setAppState(MainKeyListener.MAIN_MENU);
ChannelInstallationDialog chDialog = MainActivity.activity
.getDialogManager()
.getChannelInstallationDialog();
if (chDialog != null) {
chDialog.show();
}
}
}, 50);
new A4TVToast(ctx).showToast(R.string.error_during_scan);
isScanning = false;
}
super.handleMessage(msg);
}
};
// set params of upper buttons
initFilterOptionArray();
// Calculate width unit for filter buttons
widthMeasureUnit = MainActivity.screenWidth / widthMeasureUnitDivider;
// init filters
loadFilterOptions();
// if (MainActivity.activity.isFullHD()) {
// A4TVTextView topBanner = (A4TVTextView)
// findViewById(R.id.contentListTopBannerText);
// topBanner.setTextSize(context.getResources().getDimension(
// com.iwedia.gui.R.dimen.a4tvdialog_button_text_size_1080p));
// }
progressDialog = new A4TVProgressDialog(ctx);
progressDialog.setTitleOfAlertDialog(R.string.aborting_scan);
progressDialog.setCancelable(false);
progressDialog.setMessage(ctx.getResources().getString(
R.string.please_wait));
setUpDividers();
animTranslate = AnimationUtils.loadAnimation(ctx,
R.anim.translate_left_scan_animation);
animTranslateExit = AnimationUtils.loadAnimation(ctx,
R.anim.translate_left_exit_scan_animation);
resetViews();
}
private void resetViews() {
for (int i = 0; i < contentsForGridView.length; i++) {
contentsForGridView[i] = null;
}
contentsList.clear();
if (servicesText != null) {
servicesText.setText("0");
}
if (radioText != null) {
radioText.setText("0");
}
if (dataText != null) {
dataText.setText("0");
}
numberOfServices = 0;
numberOfRadio = 0;
numberOfData = 0;
textViewScannedFrequncy.setText("");
progressScan.setProgress(0);
progressSignalQuality.setProgress(0);
progressSignalStrength.setProgress(0);
}
@Override
public void onBackPressed() {
if (getTextTopBanner()
.getText()
.toString()
.equals(ctx
.getResources()
.getString(
R.string.tv_menu_channel_installation_settings_manual_tunning))) {
new A4TVToast(ctx)
.showToast(R.string.tv_menu_channel_installation_settings_manual_tunning_abort_not_supported);
} else {
new AbortScanTask().execute();
}
}
@Override
public void fillDialog() {
setContentView(R.layout.channel_scan_dialog_main_overscale);
}
@Override
public void setDialogAttributes() {
if (MainActivity.screenWidth == WIDTH_720p
|| MainActivity.screenHeight == WIDTH_720p) {
getWindow().getAttributes().height = HEIGHT_720p;
getWindow().getAttributes().width = WIDTH_720p;
}
if (MainActivity.screenWidth == WIDTH_1080p
|| MainActivity.screenHeight == WIDTH_1080p) {
getWindow().getAttributes().height = HEIGHT_1080p;
getWindow().getAttributes().width = WIDTH_1080p;
}
}
/**
* Function that load theme
*
* @param ctx
* @return
*/
private static int checkTheme(Context ctx) {
TypedArray atts = ctx.getTheme().obtainStyledAttributes(
new int[] { R.attr.A4TVDialogTransparent });
int i = atts.getResourceId(0, 0);
atts.recycle();
return i;
// return android.R.style.Theme_Translucent_NoTitleBar_Fullscreen;
}
/**
* Function for inflating views
*/
private LinearLayout loadItemsIntoMatrics(boolean fakeItem, Content content) {
// Log.d(TAG, "load items into matrics function entered");
LinearLayout item;
// Inflate grid element xml
item = (LinearLayout) inflater.inflate(
com.iwedia.gui.R.layout.content_list_element_grid, null);
GridView.LayoutParams params1 = new GridView.LayoutParams(
LayoutParams.MATCH_PARENT, 4 * MainActivity.screenHeight / 21);
// Take reference of frame layout holder
item.setLayoutParams(params1);
if (!fakeItem) {
// ////////////////////////// ITEM 1 ///////////////////////////
A4TVTextView itemText1 = (A4TVTextView) item
.findViewById(com.iwedia.gui.R.id.contentName);//
// Take reference of image view in content list item
ImageView itemImage1 = (ImageView) item
.findViewById(com.iwedia.gui.R.id.contentImage);//
ImageView contentTypeImage = (ImageView) item
.findViewById(com.iwedia.gui.R.id.contentFilterTypeImage);//
A4TVTextView contentNameText1 = (A4TVTextView) item
.findViewById(com.iwedia.gui.R.id.contentNameText);//
// /////////////////////////////////////////////////////////////////////
// Set image and text on content list item
String imagePath = content.getImage();
if (!imagePath.equals(NO_IMAGE)) {
itemImage1.setImageBitmap(MainActivity.mMemoryCache
.loadBitmapFromDisk(imagePath));
itemImage1.setScaleType(ScaleType.FIT_XY);
FrameLayout.LayoutParams imageParams = new FrameLayout.LayoutParams(
MainActivity.screenWidth / 12,
MainActivity.screenHeight / 12);
imageParams.gravity = Gravity.CENTER;
itemImage1.setLayoutParams(imageParams);
contentNameText1.setText("");
} else {
// ////////////////////////////////
// There is no image
// ////////////////////////////////
contentNameText1.setText(content.getName());
itemImage1.setImageBitmap(null);
}
// set content name
itemText1.setText(content.getName());
// if (MainActivity.activity.isFullHD()) {
// itemText1.setTextSize(ctx.getResources().getDimension(
// R.dimen.content_item_text_size_1080p));
// } else {
// itemText1.setTextSize(ctx.getResources().getDimension(
// R.dimen.content_item_text_size));
// }
ChannelInstallationDialog chDialog = MainActivity.activity
.getDialogManager().getChannelInstallationDialog();
if (chDialog != null)
selectedTunerType = ((A4TVSpinner) chDialog
.findViewById(ChannelInstallationDialog.TV_MENU_CHANNEL_INSTALLATION_SETTINGS_TUNER_TYPE))
.getCHOOSEN_ITEM_INDEX();
// set content type picture
switch (content.getServiceType()) {
case DATA_BROADCAST: {
// numberOfData++;
contentTypeImage
.setImageResource(com.iwedia.gui.R.drawable.data_filter_selector);
break;
}
case DIG_TV: {
// numberOfServices++;
if (selectedTunerType == ChannelInstallationDialog.TUNER_DVBT) {
contentTypeImage
.setImageResource(com.iwedia.gui.R.drawable.t_filter_selector);
} else if (selectedTunerType == ChannelInstallationDialog.TUNER_DVBS) {
contentTypeImage
.setImageResource(com.iwedia.gui.R.drawable.s_filter_selector);
} else if (selectedTunerType == ChannelInstallationDialog.TUNER_DVBC) {
contentTypeImage
.setImageResource(com.iwedia.gui.R.drawable.c_filter_selector);
} else if (selectedTunerType == ChannelInstallationDialog.TUNER_ATV) {
contentTypeImage
.setImageResource(com.iwedia.gui.R.drawable.a_filter_selector);
}
break;
}
case DIG_RAD: {
// numberOfRadio++;
contentTypeImage
.setImageResource(com.iwedia.gui.R.drawable.radio_filter_selector);
break;
}
default:
// numberOfServices++;
if (selectedTunerType == ChannelInstallationDialog.TUNER_DVBT) {
contentTypeImage
.setImageResource(com.iwedia.gui.R.drawable.t_filter_selector);
} else if (selectedTunerType == ChannelInstallationDialog.TUNER_DVBS) {
contentTypeImage
.setImageResource(com.iwedia.gui.R.drawable.s_filter_selector);
} else if (selectedTunerType == ChannelInstallationDialog.TUNER_DVBC) {
contentTypeImage
.setImageResource(com.iwedia.gui.R.drawable.c_filter_selector);
} else if (selectedTunerType == ChannelInstallationDialog.TUNER_ATV) {
contentTypeImage
.setImageResource(com.iwedia.gui.R.drawable.a_filter_selector);
}
break;
}
}
// add fake item
else {
// Set image and text on content list item
item.setVisibility(View.INVISIBLE);
item.setFocusable(false);
item.setEnabled(false);
item.setClickable(false);
}
return item;
}
private void refreshAdapterData() {
Log.d(TAG, "REFRESH ADAPTER DATA IN SCAN");
int countTo;
if (contentsList.size() >= 12) {
countTo = 12;
} else {
countTo = contentsList.size();
}
for (int i = 0; i < countTo; i++) {
contentsForGridView[INDEX_LOOK_UP_TABLE[i]] = contentsList.get(i);
}
gridAdapter.notifyDataSetChanged();
// handlerScanFinished.sendEmptyMessage(1);
for (int i = 0; i < countTo; i++) {
contentsList.remove(0);
}
}
private class ChannelsGridAdapter extends BaseAdapter {
@Override
public int getCount() {
return contentsForGridView.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (contentsForGridView[position] == null) {
convertView = loadItemsIntoMatrics(true,
contentsForGridView[position]);
} else {
View view = convertView;
convertView = loadItemsIntoMatrics(false,
contentsForGridView[position]);
if (view != null) {
view.startAnimation(animTranslateExit);
}
if (convertView != null) {
convertView.startAnimation(animTranslate);
}
}
return convertView;
}
}
/** Async Task for get_category_properties() from web service */
private class AbortScanTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute() {
progressDialog.show();
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... params) {
if (isScanning) {
try {
MainActivity.service.getScanControl().abortScan();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
protected void onPostExecute(Boolean result) {
// post delayed for protection if wrong tuner is selected
// new Handler().postDelayed(new Runnable() {
//
// @Override
// public void run() {
// endScan(false);
// }
// }, 60000);
}
};
/** Method for clearing dialogs for scanning and showing info message */
public void endScan(boolean isForIP) {
Log.d(TAG, "END SCAN FUNCTION ENTERED");
resetViews();
if (MainActivity.isInFirstTimeInstall) {
if (ChannelScanDialog.this.isShowing() || isForIP) {
progressDialog.dismiss();
ChannelScanDialog.this.cancel();
ChannelInstallationDialog chDialog = MainActivity.activity
.getDialogManager().getChannelInstallationDialog();
if (chDialog != null) {
chDialog.cancel();
}
// //////////////////////////////////////
// Services is found
// //////////////////////////////////////
if (getNumberOfServicesAfterScan() > 0) {
if (MainActivity.activity.getFirstTimeInfoText() != null) {
MainActivity.activity.getFirstTimeInfoText().setText(
R.string.first_time_install_end_fti);
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (MainActivity.activity
.getFirstTimeInstallLayout() != null) {
MainActivity.activity
.getFirstTimeInstallLayout()
.setVisibility(View.GONE);
MainKeyListener
.setAppState(MainKeyListener.CLEAN_SCREEN);
MainActivity
.getSharedPrefs()
.edit()
.putBoolean(
MainActivity.FIRST_TIME_INSTALL,
false).commit();
MainActivity.isInFirstTimeInstall = false;
}
}
}, TIME_TO_SHOW_FTI_END_TEXT);
// If it is info active, close it
if (MainActivity.activity.getPageCurl().getCurrentState() == STATE_INFO) {
MainActivity.activity.getPageCurl().info();
}
}
// ///////////////////////////////////////////
// No services found
// ///////////////////////////////////////////
else {
showAlertDialogWhenThereIsNoServicesFoundAfterScan(MainActivity.isInFirstTimeInstall);
}
isScanning = false;
}
} else
// if scan dialog is showing cancel it and open main menu
if (ChannelScanDialog.this.isShowing() || isForIP) {
progressDialog.dismiss();
ChannelScanDialog.this.cancel();
if (getNumberOfServicesAfterScan() > 0) {
if (!isForIP) {
// ////////////////////////////////////////////////
// Gallery unscaled and unrotated images bug fix
// ////////////////////////////////////////////////
Handler delay = new Handler();
delay.postDelayed(new Runnable() {
@Override
public void run() {
MainActivity.activity.getMainMenuHandler()
.getMainMenuDialog().cancel();
MainActivity.activity.getMainMenuHandler()
.getMainMenuDialog().show();
MainActivity.activity.getMainMenuHandler()
.getA4TVOnSelectLister()
.startAnimationsManual();
MainKeyListener
.setAppState(MainKeyListener.MAIN_MENU);
}
}, 150);
Log.d(TAG, "BEFORE CHECK OF INFO");
// If it is info active, close it
if (MainActivity.activity.getPageCurl().getCurrentState() == STATE_INFO) {
MainActivity.activity.getPageCurl().info();
}
} else {
new A4TVToast(ctx).showToast(R.string.scan_finished);
}
} else {
showAlertDialogWhenThereIsNoServicesFoundAfterScan(false);
}
isScanning = false;
}
}
/**
* Calculates number of services scanned
*
* @return number of services
*/
private int getNumberOfServicesAfterScan() {
IContentListControl conControl = null;
try {
conControl = MainActivity.service.getContentListControl();
} catch (Exception e) {
e.printStackTrace();
}
if (conControl != null) {
int size = 0;
try {
size = MainActivity.service.getServiceControl()
.getServiceListCount(ServiceListIndex.MASTER_LIST);
if (ConfigHandler.IP) {
size += conControl
.getContentFilterListSize(FilterType.IP_STREAM);
size += conControl.getContentListSize();
}
} catch (Exception e) {
e.printStackTrace();
}
return size;
}
return 0;
}
/**
* Shows alert dialog when there is no services found after scan
*/
private void showAlertDialogWhenThereIsNoServicesFoundAfterScan(
final boolean isInFirstTimeInstall) {
final A4TVAlertDialog alert = new A4TVAlertDialog(ctx);
alert.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode,
KeyEvent event) {
switch (keyCode) {
// ///////////////////////////////////////////////////////////////////
// Disable Volume keys when retry scan dialog is visible
// ///////////////////////////////////////////////////////////////////
// case KeyEvent.KEYCODE_F6:
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
case KeyEvent.KEYCODE_MUTE: {
return true;
}
default:
break;
}
return false;
}
});
alert.setTitleOfAlertDialog(R.string.first_time_install_no_services_found);
alert.setPositiveButton(R.string.first_time_install_scan_restart,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isInFirstTimeInstall) {
MainActivity.activity.getMainMenuHandler()
.getMainMenuDialog().show();
MainActivity.activity.getMainMenuHandler()
.getA4TVOnSelectLister()
.startAnimationsManual();
MainKeyListener
.setAppState(MainKeyListener.MAIN_MENU);
}
ChannelInstallationDialog chDialog = MainActivity.activity
.getDialogManager()
.getChannelInstallationDialog();
if (chDialog != null) {
chDialog.show();
}
alert.cancel();
}
});
alert.setNegativeButton(R.string.first_time_install_just_finish,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
if (isInFirstTimeInstall) {
// end first time install and show main
// menu
if (MainActivity.activity.getFirstTimeInfoText() != null) {
MainActivity.activity
.getFirstTimeInfoText()
.setText(
R.string.first_time_install_end_fti);
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (MainActivity.activity
.getFirstTimeInstallLayout() != null) {
MainActivity.activity
.getFirstTimeInstallLayout()
.setVisibility(View.GONE);
}
MainActivity
.getSharedPrefs()
.edit()
.putBoolean(
MainActivity.FIRST_TIME_INSTALL,
false).commit();
MainActivity.isInFirstTimeInstall = false;
MainActivity.activity.getCheckServiceType()
.showNoSignalLayout();
MainActivity.activity.getCallBackHandler()
.setAntenaConnected(false);
}
}, TIME_TO_SHOW_FTI_END_TEXT);
} else {
new Handler().postDelayed(
new Runnable() {
@Override
public void run() {
MainActivity.activity
.getMainMenuHandler()
.getMainMenuDialog().show();
MainActivity.activity
.getMainMenuHandler()
.getA4TVOnSelectLister()
.startAnimationsManual();
MainKeyListener
.setAppState(MainKeyListener.MAIN_MENU);
}
},
isInFirstTimeInstall ? TIME_TO_SHOW_FTI_END_TEXT + 100
: 100);
}
alert.cancel();
}
});
// show alert dialog
alert.show();
}
/** Set up position of grid dividers on screen */
public void setUpDividers() {
// Check resolution and add layout params
ImageView allFirstGridDivider = (ImageView) findViewById(com.iwedia.gui.R.id.allItemFirstGridDivider);
ImageView allSecondGridDivider = (ImageView) findViewById(com.iwedia.gui.R.id.allItemSecondGridDivider);
ImageView allThirdGridDivider = (ImageView) findViewById(com.iwedia.gui.R.id.allItemThirdGridDivider);
// //////////////////////////
// 720p
// //////////////////////////
if (MainActivity.screenWidth == 1280) {
FrameLayout.LayoutParams firstDivParams = new FrameLayout.LayoutParams(
android.widget.FrameLayout.LayoutParams.MATCH_PARENT,
android.widget.FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.TOP);
firstDivParams.topMargin = 35;
allFirstGridDivider.setLayoutParams(firstDivParams);
// PE Android4TV
if (MainActivity.screenHeight != MainActivity.SCREEN_HEIGHT_720P) {
FrameLayout.LayoutParams secondDivParams = new FrameLayout.LayoutParams(
android.widget.FrameLayout.LayoutParams.MATCH_PARENT,
android.widget.FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.TOP);
secondDivParams.topMargin = 127;
allSecondGridDivider.setLayoutParams(secondDivParams);
FrameLayout.LayoutParams thirdDivParams = new FrameLayout.LayoutParams(
android.widget.FrameLayout.LayoutParams.MATCH_PARENT,
android.widget.FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.TOP);
thirdDivParams.topMargin = 165;
allThirdGridDivider.setLayoutParams(thirdDivParams);
}
// AMP Android4TV
else {
FrameLayout.LayoutParams secondDivParams = new FrameLayout.LayoutParams(
android.widget.FrameLayout.LayoutParams.MATCH_PARENT,
android.widget.FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.TOP);
secondDivParams.topMargin = 135;
allSecondGridDivider.setLayoutParams(secondDivParams);
FrameLayout.LayoutParams thirdDivParams = new FrameLayout.LayoutParams(
android.widget.FrameLayout.LayoutParams.MATCH_PARENT,
android.widget.FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.TOP);
thirdDivParams.topMargin = 175;
allThirdGridDivider.setLayoutParams(thirdDivParams);
}
}
// ////////////////////////////////
// 1080p
// ////////////////////////////////
if (MainActivity.screenWidth == 1920) {
FrameLayout.LayoutParams firstDivParams = new FrameLayout.LayoutParams(
android.widget.FrameLayout.LayoutParams.MATCH_PARENT,
android.widget.FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.TOP);
firstDivParams.topMargin = 60;
allFirstGridDivider.setLayoutParams(firstDivParams);
FrameLayout.LayoutParams secondDivParams = new FrameLayout.LayoutParams(
android.widget.FrameLayout.LayoutParams.MATCH_PARENT,
android.widget.FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.TOP);
secondDivParams.topMargin = 210;
allSecondGridDivider.setLayoutParams(secondDivParams);
FrameLayout.LayoutParams thirdDivParams = new FrameLayout.LayoutParams(
android.widget.FrameLayout.LayoutParams.MATCH_PARENT,
android.widget.FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.TOP);
thirdDivParams.topMargin = 265;
allThirdGridDivider.setLayoutParams(thirdDivParams);
}
}
/** Default values of filter option array */
private void initFilterOptionArray() {
// ////////////////////////////////
// Check config
// ////////////////////////////////
filterOptions[FILTER_ALL_OPTION] = true;
if (ConfigHandler.DVB_T) {
filterOptions[FILTER_DVB_T_OPTION] = true;
} else {
filterOptions[FILTER_DVB_T_OPTION] = false;
}
if (ConfigHandler.DVB_S) {
filterOptions[FILTER_DVB_S_OPTION] = true;
} else {
filterOptions[FILTER_DVB_S_OPTION] = false;
}
if (ConfigHandler.DVB_C) {
filterOptions[FILTER_DVB_C_OPTION] = true;
} else {
filterOptions[FILTER_DVB_C_OPTION] = false;
}
if (ConfigHandler.IP) {
filterOptions[FILTER_IP_OPTION] = true;
} else {
filterOptions[FILTER_IP_OPTION] = false;
}
if (ConfigHandler.ATV) {
filterOptions[FILTER_ATV_OPTION] = true;
} else {
filterOptions[FILTER_ATV_OPTION] = false;
}
}
/** Customize filter item */
private void setFilterItemParams(LinearLayout filterItem) {
LinearLayout.LayoutParams filterItemParams = new LinearLayout.LayoutParams(
widthMeasureUnit, LayoutParams.MATCH_PARENT, Gravity.CENTER);
filterItem.setLayoutParams(filterItemParams);
filterItem.setEnabled(false);
filterItem.setFocusable(false);
filterItem.setGravity(Gravity.CENTER);
}
/** Filter content of content list */
public void selectFilter(int filter) {
int filterIndex = 0;
for (int i = 0; i < filterButtons.size(); i++) {
filterButtons.get(i).setSelected(false);
if ((Integer) filterButtons.get(i).getTag() == filter) {
filterIndex = i;
}
}
// Select required one
filterButtons.get(filterIndex).setSelected(true);
filterButtons.get(filterIndex).setFocusable(true);
filterButtons.get(filterIndex).requestFocus();
filterButtons.get(filterIndex).setFocusable(false);
}
/** Load filter options layout */
private void loadFilterOptions() {
LinearLayout layout = (LinearLayout) findViewById(R.id.contentListInputFilterBanner);
// Clear lists of filter buttons
layout.removeAllViews();
filterButtons.clear();
if (filterOptions[FILTER_ALL_OPTION]) {
LinearLayout filterItem = (LinearLayout) inflater.inflate(
com.iwedia.gui.R.layout.content_list_filter_item, null);
A4TVButton allButton = (A4TVButton) filterItem
.findViewById(com.iwedia.gui.R.id.filterButton);
allButton.setFocusable(false);
allButton.setText(ctx.getResources().getString(
com.iwedia.gui.R.string.main_menu_content_list_filter_all));
// if (MainActivity.activity.isFullHD()) {
// allButton.setTextSize(ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_filter_text_size_1080p));
// } else {
// allButton.setTextSize(ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_filter_text_size));
// }
setFilterItemParams(filterItem);
filterButtons.add(filterItem);
filterItem.setTag(FILTER_ALL_OPTION);
layout.addView(filterItem);
}
if (filterOptions[FILTER_DVB_T_OPTION]) {
LinearLayout filterItem = (LinearLayout) inflater.inflate(
com.iwedia.gui.R.layout.content_list_filter_item, null);
A4TVButton dvbtButton = (A4TVButton) filterItem
.findViewById(com.iwedia.gui.R.id.filterButton);
dvbtButton.setFocusable(false);
if (ConfigHandler.ATSC) {
dvbtButton
.setText(ctx
.getResources()
.getString(
com.iwedia.gui.R.string.tv_menu_channel_installation_settings_air));
} else {
dvbtButton.setText(ctx.getResources().getString(
com.iwedia.gui.R.string.main_menu_content_list_dvb_t));
}
// if (MainActivity.activity.isFullHD()) {
// dvbtButton.setTextSize(ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_filter_text_size_1080p));
// } else {
// dvbtButton.setTextSize(ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_filter_text_size));
// }
Drawable img = ctx.getResources().getDrawable(
R.drawable.t_filter_option_selector);
img.setBounds(0, 0, 23, 18);
dvbtButton.setCompoundDrawables(img, null, null, null);
dvbtButton.setPadding(
(int) ctx.getResources().getDimension(
com.iwedia.gui.R.dimen.content_filter_padding), 0,
0, 0);
setFilterItemParams(filterItem);
filterButtons.add(filterItem);
filterItem.setTag(FILTER_DVB_T_OPTION);
layout.addView(filterItem);
}
if (filterOptions[FILTER_DVB_C_OPTION]) {
LinearLayout filterItem = (LinearLayout) inflater.inflate(
com.iwedia.gui.R.layout.content_list_filter_item, null);
A4TVButton dvbcButton = (A4TVButton) filterItem
.findViewById(com.iwedia.gui.R.id.filterButton);
dvbcButton.setFocusable(false);
if (ConfigHandler.ATSC) {
dvbcButton
.setText(ctx
.getResources()
.getString(
com.iwedia.gui.R.string.tv_menu_channel_installation_settings_cable));
} else {
dvbcButton.setText(ctx.getResources().getString(
com.iwedia.gui.R.string.main_menu_content_list_dvb_c));
}
// if (MainActivity.activity.isFullHD()) {
// dvbcButton.setTextSize(ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_filter_text_size_1080p));
// } else {
// dvbcButton.setTextSize(ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_filter_text_size));
// }
Drawable img = ctx.getResources().getDrawable(
R.drawable.c_filter_option);
img.setBounds(0, 0, 23, 18);
dvbcButton.setCompoundDrawables(img, null, null, null);
dvbcButton.setPadding(
(int) ctx.getResources().getDimension(
com.iwedia.gui.R.dimen.content_filter_padding), 0,
0, 0);
setFilterItemParams(filterItem);
filterButtons.add(filterItem);
filterItem.setTag(FILTER_DVB_C_OPTION);
layout.addView(filterItem);
}
if (filterOptions[FILTER_DVB_S_OPTION]) {
LinearLayout filterItem = (LinearLayout) inflater.inflate(
com.iwedia.gui.R.layout.content_list_filter_item, null);
A4TVButton dvbsButton = (A4TVButton) filterItem
.findViewById(com.iwedia.gui.R.id.filterButton);
dvbsButton.setFocusable(false);
if (ConfigHandler.ATSC) {
dvbsButton.setText(ctx.getResources().getString(
com.iwedia.gui.R.string.main_menu_content_list_atsc_s));
} else {
dvbsButton.setText(ctx.getResources().getString(
com.iwedia.gui.R.string.main_menu_content_list_dvb_s));
}
// if (MainActivity.activity.isFullHD()) {
// dvbsButton.setTextSize(ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_filter_text_size_1080p));
// } else {
// dvbsButton.setTextSize(ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_filter_text_size));
// }
Drawable img = ctx.getResources().getDrawable(
R.drawable.s_filter_option);
img.setBounds(0, 0, 23, 18);
dvbsButton.setCompoundDrawables(img, null, null, null);
dvbsButton.setPadding(
(int) ctx.getResources().getDimension(
com.iwedia.gui.R.dimen.content_filter_padding), 0,
0, 0);
setFilterItemParams(filterItem);
filterButtons.add(filterItem);
filterItem.setTag(FILTER_DVB_S_OPTION);
layout.addView(filterItem);
}
if (filterOptions[FILTER_IP_OPTION]) {
LinearLayout filterItem = (LinearLayout) inflater.inflate(
com.iwedia.gui.R.layout.content_list_filter_item, null);
A4TVButton dvbsButton = (A4TVButton) filterItem
.findViewById(com.iwedia.gui.R.id.filterButton);
dvbsButton.setFocusable(false);
dvbsButton.setText(ctx.getResources().getString(
com.iwedia.gui.R.string.main_menu_content_list_ip));
// if (MainActivity.activity.isFullHD()) {
// dvbsButton.setTextSize(ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_filter_text_size_1080p));
// } else {
// dvbsButton.setTextSize(ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_filter_text_size));
// }
Drawable img = ctx.getResources().getDrawable(
R.drawable.ip_filter_option);
img.setBounds(0, 0, 23, 18);
dvbsButton.setCompoundDrawables(img, null, null, null);
dvbsButton.setPadding(
(int) ctx.getResources().getDimension(
com.iwedia.gui.R.dimen.content_filter_padding), 0,
0, 0);
setFilterItemParams(filterItem);
filterButtons.add(filterItem);
filterItem.setTag(FILTER_IP_OPTION);
layout.addView(filterItem);
}
if (filterOptions[FILTER_ATV_OPTION]) {
if (!ConfigHandler.ATSC) {
LinearLayout filterItem = (LinearLayout) inflater.inflate(
com.iwedia.gui.R.layout.content_list_filter_item, null);
A4TVButton atvButton = (A4TVButton) filterItem
.findViewById(com.iwedia.gui.R.id.filterButton);
atvButton.setFocusable(false);
atvButton.setText(ctx.getResources().getString(
com.iwedia.gui.R.string.main_menu_content_list_atv));
// if (MainActivity.activity.isFullHD()) {
// atvButton
// .setTextSize(ctx
// .getResources()
// .getDimension(
// com.iwedia.gui.R.dimen.content_filter_text_size_1080p));
// } else {
// atvButton.setTextSize(ctx.getResources().getDimension(
// com.iwedia.gui.R.dimen.content_filter_text_size));
// }
Drawable img = ctx.getResources().getDrawable(
R.drawable.a_filter_option);
img.setBounds(0, 0, 23, 18);
atvButton.setCompoundDrawables(img, null, null, null);
atvButton.setPadding(
(int) ctx.getResources().getDimension(
com.iwedia.gui.R.dimen.content_filter_padding),
0, 0, 0);
setFilterItemParams(filterItem);
filterButtons.add(filterItem);
filterItem.setTag(FILTER_ATV_OPTION);
layout.addView(filterItem);
}
}
}
/** Include DVB T in as filtering option */
public void enableDVBT() {
filterOptions[FILTER_DVB_T_OPTION] = true;
}
/** Include DVB T in as filtering option */
public void enableDVBC() {
filterOptions[FILTER_DVB_C_OPTION] = true;
}
/** Include DVB T in as filtering option */
public void enableDVBS() {
filterOptions[FILTER_DVB_S_OPTION] = true;
}
/** Include IP in as filtering option */
public void enableIP() {
filterOptions[FILTER_IP_OPTION] = true;
}
/** Include IP in as filtering option */
public void enableATV() {
filterOptions[FILTER_ATV_OPTION] = true;
}
// not needed here
@Override
public void returnArrayListsWithDialogContents(
ArrayList<ArrayList<Integer>> contentList,
ArrayList<ArrayList<Integer>> contentListIDs,
ArrayList<Integer> titleIDs) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
((A4TVProgressBar) seekBar).setText(String.valueOf(seekBar
.getProgress()));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
public A4TVProgressBar getProgressScan() {
return progressScan;
}
public A4TVProgressBar getProgressSignalStrength() {
return progressSignalStrength;
}
public A4TVProgressBar getProgressSignalQuality() {
return progressSignalQuality;
}
public A4TVTextView getTextTopBanner() {
return textTopBanner;
}
public A4TVTextView getTextViewScannedFrequncy() {
return textViewScannedFrequncy;
}
public Handler getHandlerScanFinished() {
return handlerScanFinished;
}
public int getNumberOfServices() {
return numberOfServices;
}
public void setNumberOfServices(int numberOfServices) {
this.numberOfServices = numberOfServices;
}
public int getNumberOfRadio() {
return numberOfRadio;
}
public void setNumberOfRadio(int numberOfRadio) {
this.numberOfRadio = numberOfRadio;
}
public int getNumberOfData() {
return numberOfData;
}
public void setNumberOfData(int numberOfData) {
this.numberOfData = numberOfData;
}
public ArrayList<Content> getContentsList() {
return contentsList;
}
public static boolean isScanning() {
return isScanning;
}
public static void setScanning(boolean isScanning) {
ChannelScanDialog.isScanning = isScanning;
}
}