package com.xiaomi.mitv.store.view; import android.app.Activity; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.text.TextUtils; import android.view.View; import com.tv.ui.metro.view.MainHandler; import com.tv.ui.metro.view.MineView; import com.tv.ui.metro.sampleapp.R; import com.xiaomi.mitv.store.bluetooth.BluetoothReceiver; import com.xiaomi.mitv.store.bluetooth.OnBluetoothHandlerListener; import com.xiaomi.mitv.store.bluetooth.OnFindHanlderCallback; import java.util.ArrayList; import com.tv.ui.metro.sampleapp.R; import com.xiaomi.mitv.store.game.HandlerHelperActivity; /** * Created by game center on 9/9/14. */ public class BluetoothView extends MineView implements OnBluetoothHandlerListener, OnFindHanlderCallback { private Object mHandlerObject = new Object(); private ArrayList<String> mHandlerList = new ArrayList<String>(8); private BluetoothReceiver mBlueReceiver; private IntentFilter mBluetoothIntentFilter; private OnBluetoothHandlerListener listener; public BluetoothView(Context context, String title) { super(context); initUI(); setItemTitle(title); setItemSummary(getResources().getString(R.string.handle_connect_none)); } @Override protected void onFinishInflate() { super.onFinishInflate(); initUI(); } private void initUI(){ setBackgroundResource(R.drawable.mine_handler); setItemTitle(R.string.mine_info_handle_manager_title); setItemSummary(R.string.handle_connect_none); setFocusable(true); setOnClickListener(clickListener); this.listener = this; mBlueReceiver = new BluetoothReceiver(listener); mBluetoothIntentFilter = new IntentFilter("android.bluetooth.input.profile.action.HID_INFO"); mBluetoothIntentFilter.addAction("android.bluetooth.input.profile.action.CONNECTION_STATE_CHANGED"); synchronized (mHandlerObject) { mHandlerList.clear(); } //TODO //new HandlerCheck(getContext(), this); try { getContext().registerReceiver(mBlueReceiver, mBluetoothIntentFilter); } catch (Exception e) { e.printStackTrace(); } requestLayout(); } @Override protected void onWindowVisibilityChanged(int visibility) { super.onWindowVisibilityChanged(visibility); if(visibility == View.VISIBLE){ this.onResume(); } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); this.onStop(); this.onDestroy(); } private Activity _activity; View.OnClickListener clickListener = new View.OnClickListener(){ @Override public void onClick(View view) { if(getContext() != null){ Intent intent = new Intent(getContext(), HandlerHelperActivity.class); getContext().startActivity(intent); // ReportManager.getInstance().send( // Report.createReport(Report.ReportType.STATISTICS, null, null), // Report.MAIN_ACTION, "handle"); } } }; @Override public void onCreateView(Activity activity){ _activity = activity; } @Override public void onStart(Context context){ } @Override public void onStop(){ if(mBlueReceiver != null){ try{ this.getContext().unregisterReceiver(mBlueReceiver); }catch(Exception e){ e.printStackTrace(); } } } @Override public void findNewHandlerDevice(String address) { synchronized(mHandlerObject){ if(!mHandlerList.contains(address)){ mHandlerList.add(address); } } } @Override public void onFinishedFind() { refreshList(); } private void refreshList(){ MainHandler.getInstance().post(new Runnable(){ @Override public void run() { int connectedHanlderNum = 0; synchronized (mHandlerObject) { connectedHanlderNum = mHandlerList.size(); } if (0 == connectedHanlderNum) { setItemSummary(R.string.handle_connect_none); } else { setItemSummary(getResources().getString( R.string.connected_handler_summary_format, connectedHanlderNum)); } } }); } @Override public void connected(BluetoothDevice device) { String address = null; if(device != null){ address = device.getAddress(); } if(TextUtils.isEmpty(address)){ return; } synchronized(mHandlerObject){ if(!mHandlerList.contains(address)){ mHandlerList.add(address); refreshList(); } } } @Override public void disconnected(BluetoothDevice device) { String address = null; if(device != null){ address = device.getAddress(); } if(TextUtils.isEmpty(address)){ return; } synchronized(mHandlerObject){ if(mHandlerList.remove(address)){ refreshList(); } } } }