/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package info.guardianproject.gilga; import info.guardianproject.gilga.model.DirectMessage; import info.guardianproject.gilga.model.Status; import info.guardianproject.gilga.model.StatusAdapter; import info.guardianproject.gilga.service.GilgaService; import java.io.File; import android.app.ActionBar; import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import android.bluetooth.BluetoothAdapter; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.view.inputmethod.EditorInfo; import android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ListView; import android.widget.PopupMenu; import android.widget.PopupMenu.OnMenuItemClickListener; import android.widget.TextView; import android.widget.Toast; /** * This is the main Activity that displays the current chat session. */ public class StatusListFragment extends Fragment { // Debugging private static final String TAG = "GILGA"; private static final boolean D = true; // Key names received from the BluetoothChatService Handler public static final String DEVICE_NAME = "device_name"; public static final String TOAST = "toast"; // Layout Views private ListView mConversationView; private EditText mOutEditText; private ImageButton mSendButton; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // The last two arguments ensure LayoutParams are inflated // properly. View rootView = inflater.inflate( R.layout.status_list, container, false); setupView(rootView); return rootView; } public void switchAdapter(StatusAdapter sa) { mConversationView.setAdapter(sa); } private void setupView(final View rootView) { // Initialize the array adapter for the conversation thread mConversationView = (ListView) rootView.findViewById(R.id.statusList); mConversationView.setAdapter(GilgaApp.mStatusAdapter); mConversationView.setOnItemLongClickListener(new OnItemLongClickListener () { @Override public boolean onItemLongClick(AdapterView<?> arg0, View view, final int position, long arg3) { PopupMenu popupMenu = new PopupMenu(getActivity(), view); popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { Status status = (Status)GilgaApp.mStatusAdapter.getItem(position); switch (item.getItemId()) { case R.id.item_reshare: if (!(status instanceof DirectMessage)) //DM's can't be reshared reshareStatus(status); return true; case R.id.item_copy: ClipboardManager clipboard = (ClipboardManager)getActivity().getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("simple text",status.body); clipboard.setPrimaryClip(clip); return true; case R.id.item_reply: String reply = "@" + GilgaService.mapToNickname(status.from) + " "; mOutEditText.setText(reply); mOutEditText.setSelection(reply.length()); return true; case R.id.item_direct_message: String dm = "pm " + status.from + " "; mOutEditText.setText(dm); mOutEditText.setSelection(dm.length()); return true; default: return false; } } }); popupMenu.inflate(R.menu.popup_menu); popupMenu.show(); return true; } }); // Initialize the compose field with a listener for the return key mOutEditText = (EditText) rootView.findViewById(R.id.edit_text_out); mOutEditText.setOnEditorActionListener(mWriteListener); // Initialize the send button with a listener that for click events mSendButton = (ImageButton) rootView.findViewById(R.id.button_send); mSendButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { // Send a message using content of the edit text widget TextView view = (TextView) rootView.findViewById(R.id.edit_text_out); String message = view.getText().toString(); updateStatus(message); } }); } @Override public synchronized void onPause() { super.onPause(); } // The action listener for the EditText widget, to listen for the return key private TextView.OnEditorActionListener mWriteListener = new TextView.OnEditorActionListener() { public boolean onEditorAction(TextView view, int actionId, KeyEvent event) { // If the action is a key-up event on the return key, send the message if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_UP) { String message = view.getText().toString(); updateStatus(message); } if(D) Log.i(TAG, "END onEditorAction"); return true; } }; private void updateStatus (String status) { ((GilgaMeshActivity)getActivity()).toggleVisibility(true); Intent intent = new Intent(getActivity(), GilgaService.class); intent.putExtra("status", status); getActivity().startService(intent); mOutEditText.setText(""); } private void reshareStatus (Status status) { ((GilgaMeshActivity)getActivity()).toggleVisibility(true); String from = status.from; if (from.length() > 6) from = GilgaService.mapToNickname(from); String msgRT = "RT @" + from + ' ' + status.body; Intent intent = new Intent(getActivity(), GilgaService.class); intent.putExtra("status", msgRT); intent.putExtra("type", Status.TYPE_RETWEET); getActivity().startService(intent); } }