1*90c8c64dSAndroid Build Coastguard Worker /* 2*90c8c64dSAndroid Build Coastguard Worker * Copyright (C) 2014 The Android Open Source Project 3*90c8c64dSAndroid Build Coastguard Worker * 4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*90c8c64dSAndroid Build Coastguard Worker * 8*90c8c64dSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*90c8c64dSAndroid Build Coastguard Worker * 10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License. 15*90c8c64dSAndroid Build Coastguard Worker */ 16*90c8c64dSAndroid Build Coastguard Worker 17*90c8c64dSAndroid Build Coastguard Worker package com.example.android.messagingservice; 18*90c8c64dSAndroid Build Coastguard Worker 19*90c8c64dSAndroid Build Coastguard Worker import android.app.Fragment; 20*90c8c64dSAndroid Build Coastguard Worker import android.content.ComponentName; 21*90c8c64dSAndroid Build Coastguard Worker import android.content.Context; 22*90c8c64dSAndroid Build Coastguard Worker import android.content.Intent; 23*90c8c64dSAndroid Build Coastguard Worker import android.content.ServiceConnection; 24*90c8c64dSAndroid Build Coastguard Worker import android.content.SharedPreferences; 25*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle; 26*90c8c64dSAndroid Build Coastguard Worker import android.os.IBinder; 27*90c8c64dSAndroid Build Coastguard Worker import android.os.Message; 28*90c8c64dSAndroid Build Coastguard Worker import android.os.Messenger; 29*90c8c64dSAndroid Build Coastguard Worker import android.os.RemoteException; 30*90c8c64dSAndroid Build Coastguard Worker import android.text.method.ScrollingMovementMethod; 31*90c8c64dSAndroid Build Coastguard Worker import android.util.Log; 32*90c8c64dSAndroid Build Coastguard Worker import android.view.LayoutInflater; 33*90c8c64dSAndroid Build Coastguard Worker import android.view.View; 34*90c8c64dSAndroid Build Coastguard Worker import android.view.ViewGroup; 35*90c8c64dSAndroid Build Coastguard Worker import android.widget.Button; 36*90c8c64dSAndroid Build Coastguard Worker import android.widget.TextView; 37*90c8c64dSAndroid Build Coastguard Worker 38*90c8c64dSAndroid Build Coastguard Worker /** 39*90c8c64dSAndroid Build Coastguard Worker * The main fragment that shows the buttons and the text view containing the log. 40*90c8c64dSAndroid Build Coastguard Worker */ 41*90c8c64dSAndroid Build Coastguard Worker public class MessagingFragment extends Fragment implements View.OnClickListener { 42*90c8c64dSAndroid Build Coastguard Worker 43*90c8c64dSAndroid Build Coastguard Worker private static final String TAG = MessagingFragment.class.getSimpleName(); 44*90c8c64dSAndroid Build Coastguard Worker 45*90c8c64dSAndroid Build Coastguard Worker private Button mSendSingleConversation; 46*90c8c64dSAndroid Build Coastguard Worker private Button mSendTwoConversations; 47*90c8c64dSAndroid Build Coastguard Worker private Button mSendConversationWithThreeMessages; 48*90c8c64dSAndroid Build Coastguard Worker private TextView mDataPortView; 49*90c8c64dSAndroid Build Coastguard Worker private Button mClearLogButton; 50*90c8c64dSAndroid Build Coastguard Worker 51*90c8c64dSAndroid Build Coastguard Worker private Messenger mService; 52*90c8c64dSAndroid Build Coastguard Worker private boolean mBound; 53*90c8c64dSAndroid Build Coastguard Worker 54*90c8c64dSAndroid Build Coastguard Worker private final ServiceConnection mConnection = new ServiceConnection() { 55*90c8c64dSAndroid Build Coastguard Worker @Override 56*90c8c64dSAndroid Build Coastguard Worker public void onServiceConnected(ComponentName componentName, IBinder service) { 57*90c8c64dSAndroid Build Coastguard Worker mService = new Messenger(service); 58*90c8c64dSAndroid Build Coastguard Worker mBound = true; 59*90c8c64dSAndroid Build Coastguard Worker setButtonsState(true); 60*90c8c64dSAndroid Build Coastguard Worker } 61*90c8c64dSAndroid Build Coastguard Worker 62*90c8c64dSAndroid Build Coastguard Worker @Override 63*90c8c64dSAndroid Build Coastguard Worker public void onServiceDisconnected(ComponentName componentName) { 64*90c8c64dSAndroid Build Coastguard Worker mService = null; 65*90c8c64dSAndroid Build Coastguard Worker mBound = false; 66*90c8c64dSAndroid Build Coastguard Worker setButtonsState(false); 67*90c8c64dSAndroid Build Coastguard Worker } 68*90c8c64dSAndroid Build Coastguard Worker }; 69*90c8c64dSAndroid Build Coastguard Worker 70*90c8c64dSAndroid Build Coastguard Worker private final SharedPreferences.OnSharedPreferenceChangeListener listener = 71*90c8c64dSAndroid Build Coastguard Worker new SharedPreferences.OnSharedPreferenceChangeListener() { 72*90c8c64dSAndroid Build Coastguard Worker @Override 73*90c8c64dSAndroid Build Coastguard Worker public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 74*90c8c64dSAndroid Build Coastguard Worker if (MessageLogger.LOG_KEY.equals(key)) { 75*90c8c64dSAndroid Build Coastguard Worker mDataPortView.setText(MessageLogger.getAllMessages(getActivity())); 76*90c8c64dSAndroid Build Coastguard Worker } 77*90c8c64dSAndroid Build Coastguard Worker } 78*90c8c64dSAndroid Build Coastguard Worker }; 79*90c8c64dSAndroid Build Coastguard Worker MessagingFragment()80*90c8c64dSAndroid Build Coastguard Worker public MessagingFragment() { 81*90c8c64dSAndroid Build Coastguard Worker } 82*90c8c64dSAndroid Build Coastguard Worker 83*90c8c64dSAndroid Build Coastguard Worker @Override onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)84*90c8c64dSAndroid Build Coastguard Worker public View onCreateView(LayoutInflater inflater, ViewGroup container, 85*90c8c64dSAndroid Build Coastguard Worker Bundle savedInstanceState) { 86*90c8c64dSAndroid Build Coastguard Worker View rootView = inflater.inflate(R.layout.fragment_message_me, container, false); 87*90c8c64dSAndroid Build Coastguard Worker 88*90c8c64dSAndroid Build Coastguard Worker mSendSingleConversation = (Button) rootView.findViewById(R.id.send_1_conversation); 89*90c8c64dSAndroid Build Coastguard Worker mSendSingleConversation.setOnClickListener(this); 90*90c8c64dSAndroid Build Coastguard Worker 91*90c8c64dSAndroid Build Coastguard Worker mSendTwoConversations = (Button) rootView.findViewById(R.id.send_2_conversations); 92*90c8c64dSAndroid Build Coastguard Worker mSendTwoConversations.setOnClickListener(this); 93*90c8c64dSAndroid Build Coastguard Worker 94*90c8c64dSAndroid Build Coastguard Worker mSendConversationWithThreeMessages = 95*90c8c64dSAndroid Build Coastguard Worker (Button) rootView.findViewById(R.id.send_1_conversation_3_messages); 96*90c8c64dSAndroid Build Coastguard Worker mSendConversationWithThreeMessages.setOnClickListener(this); 97*90c8c64dSAndroid Build Coastguard Worker 98*90c8c64dSAndroid Build Coastguard Worker mDataPortView = (TextView) rootView.findViewById(R.id.data_port); 99*90c8c64dSAndroid Build Coastguard Worker mDataPortView.setMovementMethod(new ScrollingMovementMethod()); 100*90c8c64dSAndroid Build Coastguard Worker 101*90c8c64dSAndroid Build Coastguard Worker mClearLogButton = (Button) rootView.findViewById(R.id.clear); 102*90c8c64dSAndroid Build Coastguard Worker mClearLogButton.setOnClickListener(this); 103*90c8c64dSAndroid Build Coastguard Worker 104*90c8c64dSAndroid Build Coastguard Worker setButtonsState(false); 105*90c8c64dSAndroid Build Coastguard Worker 106*90c8c64dSAndroid Build Coastguard Worker return rootView; 107*90c8c64dSAndroid Build Coastguard Worker } 108*90c8c64dSAndroid Build Coastguard Worker 109*90c8c64dSAndroid Build Coastguard Worker @Override onClick(View view)110*90c8c64dSAndroid Build Coastguard Worker public void onClick(View view) { 111*90c8c64dSAndroid Build Coastguard Worker if (view == mSendSingleConversation) { 112*90c8c64dSAndroid Build Coastguard Worker sendMsg(1, 1); 113*90c8c64dSAndroid Build Coastguard Worker } else if (view == mSendTwoConversations) { 114*90c8c64dSAndroid Build Coastguard Worker sendMsg(2, 1); 115*90c8c64dSAndroid Build Coastguard Worker } else if (view == mSendConversationWithThreeMessages) { 116*90c8c64dSAndroid Build Coastguard Worker sendMsg(1, 3); 117*90c8c64dSAndroid Build Coastguard Worker } else if (view == mClearLogButton) { 118*90c8c64dSAndroid Build Coastguard Worker MessageLogger.clear(getActivity()); 119*90c8c64dSAndroid Build Coastguard Worker mDataPortView.setText(MessageLogger.getAllMessages(getActivity())); 120*90c8c64dSAndroid Build Coastguard Worker } 121*90c8c64dSAndroid Build Coastguard Worker } 122*90c8c64dSAndroid Build Coastguard Worker 123*90c8c64dSAndroid Build Coastguard Worker @Override onStart()124*90c8c64dSAndroid Build Coastguard Worker public void onStart() { 125*90c8c64dSAndroid Build Coastguard Worker super.onStart(); 126*90c8c64dSAndroid Build Coastguard Worker getActivity().bindService(new Intent(getActivity(), MessagingService.class), mConnection, 127*90c8c64dSAndroid Build Coastguard Worker Context.BIND_AUTO_CREATE); 128*90c8c64dSAndroid Build Coastguard Worker } 129*90c8c64dSAndroid Build Coastguard Worker 130*90c8c64dSAndroid Build Coastguard Worker @Override onPause()131*90c8c64dSAndroid Build Coastguard Worker public void onPause() { 132*90c8c64dSAndroid Build Coastguard Worker super.onPause(); 133*90c8c64dSAndroid Build Coastguard Worker MessageLogger.getPrefs(getActivity()).unregisterOnSharedPreferenceChangeListener(listener); 134*90c8c64dSAndroid Build Coastguard Worker } 135*90c8c64dSAndroid Build Coastguard Worker 136*90c8c64dSAndroid Build Coastguard Worker @Override onResume()137*90c8c64dSAndroid Build Coastguard Worker public void onResume() { 138*90c8c64dSAndroid Build Coastguard Worker super.onResume(); 139*90c8c64dSAndroid Build Coastguard Worker mDataPortView.setText(MessageLogger.getAllMessages(getActivity())); 140*90c8c64dSAndroid Build Coastguard Worker MessageLogger.getPrefs(getActivity()).registerOnSharedPreferenceChangeListener(listener); 141*90c8c64dSAndroid Build Coastguard Worker } 142*90c8c64dSAndroid Build Coastguard Worker 143*90c8c64dSAndroid Build Coastguard Worker @Override onStop()144*90c8c64dSAndroid Build Coastguard Worker public void onStop() { 145*90c8c64dSAndroid Build Coastguard Worker super.onStop(); 146*90c8c64dSAndroid Build Coastguard Worker if (mBound) { 147*90c8c64dSAndroid Build Coastguard Worker getActivity().unbindService(mConnection); 148*90c8c64dSAndroid Build Coastguard Worker mBound = false; 149*90c8c64dSAndroid Build Coastguard Worker } 150*90c8c64dSAndroid Build Coastguard Worker } 151*90c8c64dSAndroid Build Coastguard Worker sendMsg(int howManyConversations, int messagesPerConversation)152*90c8c64dSAndroid Build Coastguard Worker private void sendMsg(int howManyConversations, int messagesPerConversation) { 153*90c8c64dSAndroid Build Coastguard Worker if (mBound) { 154*90c8c64dSAndroid Build Coastguard Worker Message msg = Message.obtain(null, MessagingService.MSG_SEND_NOTIFICATION, 155*90c8c64dSAndroid Build Coastguard Worker howManyConversations, messagesPerConversation); 156*90c8c64dSAndroid Build Coastguard Worker try { 157*90c8c64dSAndroid Build Coastguard Worker mService.send(msg); 158*90c8c64dSAndroid Build Coastguard Worker } catch (RemoteException e) { 159*90c8c64dSAndroid Build Coastguard Worker Log.e(TAG, "Error sending a message", e); 160*90c8c64dSAndroid Build Coastguard Worker MessageLogger.logMessage(getActivity(), "Error occurred while sending a message."); 161*90c8c64dSAndroid Build Coastguard Worker } 162*90c8c64dSAndroid Build Coastguard Worker } 163*90c8c64dSAndroid Build Coastguard Worker } 164*90c8c64dSAndroid Build Coastguard Worker setButtonsState(boolean enable)165*90c8c64dSAndroid Build Coastguard Worker private void setButtonsState(boolean enable) { 166*90c8c64dSAndroid Build Coastguard Worker mSendSingleConversation.setEnabled(enable); 167*90c8c64dSAndroid Build Coastguard Worker mSendTwoConversations.setEnabled(enable); 168*90c8c64dSAndroid Build Coastguard Worker mSendConversationWithThreeMessages.setEnabled(enable); 169*90c8c64dSAndroid Build Coastguard Worker } 170*90c8c64dSAndroid Build Coastguard Worker } 171