Blame client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/HomeActivity.java

Packit 1fb8d4
/*
Packit 1fb8d4
   Main/Home Activity
Packit 1fb8d4
Packit 1fb8d4
   Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz
Packit 1fb8d4
Packit 1fb8d4
   This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
Packit 1fb8d4
   If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
Packit 1fb8d4
*/
Packit 1fb8d4
Packit 1fb8d4
package com.freerdp.freerdpcore.presentation;
Packit 1fb8d4
Packit 1fb8d4
import android.app.AlertDialog;
Packit 1fb8d4
import android.content.DialogInterface;
Packit 1fb8d4
import android.content.Intent;
Packit 1fb8d4
import android.content.res.Configuration;
Packit 1fb8d4
import android.net.Uri;
Packit 1fb8d4
import android.os.Bundle;
Packit 1fb8d4
import android.support.v7.app.AppCompatActivity;
Packit 1fb8d4
import android.text.Editable;
Packit 1fb8d4
import android.text.TextWatcher;
Packit 1fb8d4
import android.util.Log;
Packit 1fb8d4
import android.view.ContextMenu;
Packit 1fb8d4
import android.view.ContextMenu.ContextMenuInfo;
Packit 1fb8d4
import android.view.Menu;
Packit 1fb8d4
import android.view.MenuInflater;
Packit 1fb8d4
import android.view.MenuItem;
Packit 1fb8d4
import android.view.View;
Packit 1fb8d4
import android.view.View.OnClickListener;
Packit 1fb8d4
import android.view.View.OnCreateContextMenuListener;
Packit 1fb8d4
import android.widget.AdapterView;
Packit 1fb8d4
import android.widget.AdapterView.AdapterContextMenuInfo;
Packit 1fb8d4
import android.widget.Button;
Packit 1fb8d4
import android.widget.CheckBox;
Packit 1fb8d4
import android.widget.EditText;
Packit 1fb8d4
import android.widget.ListView;
Packit 1fb8d4
Packit 1fb8d4
import com.freerdp.freerdpcore.R;
Packit 1fb8d4
import com.freerdp.freerdpcore.application.GlobalApp;
Packit 1fb8d4
import com.freerdp.freerdpcore.domain.BookmarkBase;
Packit 1fb8d4
import com.freerdp.freerdpcore.domain.ConnectionReference;
Packit 1fb8d4
import com.freerdp.freerdpcore.domain.PlaceholderBookmark;
Packit 1fb8d4
import com.freerdp.freerdpcore.domain.QuickConnectBookmark;
Packit 1fb8d4
import com.freerdp.freerdpcore.utils.BookmarkArrayAdapter;
Packit 1fb8d4
import com.freerdp.freerdpcore.utils.SeparatedListAdapter;
Packit 1fb8d4
Packit 1fb8d4
import java.util.ArrayList;
Packit 1fb8d4
Packit 1fb8d4
public class HomeActivity extends AppCompatActivity {
Packit 1fb8d4
    private final static String ADD_BOOKMARK_PLACEHOLDER = "add_bookmark";
Packit 1fb8d4
    private static final String TAG = "HomeActivity";
Packit 1fb8d4
    private static final String PARAM_SUPERBAR_TEXT = "superbar_text";
Packit 1fb8d4
    private ListView listViewBookmarks;
Packit 1fb8d4
    private Button clearTextButton;
Packit 1fb8d4
    private EditText superBarEditText;
Packit 1fb8d4
    private BookmarkArrayAdapter manualBookmarkAdapter;
Packit 1fb8d4
    private SeparatedListAdapter separatedListAdapter;
Packit 1fb8d4
    private PlaceholderBookmark addBookmarkPlaceholder;
Packit 1fb8d4
    private String sectionLabelBookmarks;
Packit 1fb8d4
Packit 1fb8d4
    View mDecor;
Packit 1fb8d4
Packit 1fb8d4
    @Override
Packit 1fb8d4
    public void onCreate(Bundle savedInstanceState) {
Packit 1fb8d4
        setTitle(R.string.title_home);
Packit 1fb8d4
        super.onCreate(savedInstanceState);
Packit 1fb8d4
        setContentView(R.layout.home);
Packit 1fb8d4
Packit 1fb8d4
        mDecor = getWindow().getDecorView();
Packit 1fb8d4
        mDecor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
Packit 1fb8d4
Packit 1fb8d4
        long heapSize = Runtime.getRuntime().maxMemory();
Packit 1fb8d4
        Log.i(TAG, "Max HeapSize: " + heapSize);
Packit 1fb8d4
        Log.i(TAG, "App data folder: " + getFilesDir().toString());
Packit 1fb8d4
Packit 1fb8d4
        // load strings
Packit 1fb8d4
        sectionLabelBookmarks = getResources().getString(R.string.section_bookmarks);
Packit 1fb8d4
Packit 1fb8d4
        // create add bookmark/quick connect bookmark placeholder
Packit 1fb8d4
        addBookmarkPlaceholder = new PlaceholderBookmark();
Packit 1fb8d4
        addBookmarkPlaceholder.setName(ADD_BOOKMARK_PLACEHOLDER);
Packit 1fb8d4
        addBookmarkPlaceholder.setLabel(getResources().getString(R.string.list_placeholder_add_bookmark));
Packit 1fb8d4
Packit 1fb8d4
        // check for passed .rdp file and open it in a new bookmark
Packit 1fb8d4
        Intent caller = getIntent();
Packit 1fb8d4
        Uri callParameter = caller.getData();
Packit 1fb8d4
Packit 1fb8d4
        if (Intent.ACTION_VIEW.equals(caller.getAction()) && callParameter != null) {
Packit 1fb8d4
            String refStr = ConnectionReference.getFileReference(callParameter.getPath());
Packit 1fb8d4
            Bundle bundle = new Bundle();
Packit 1fb8d4
            bundle.putString(BookmarkActivity.PARAM_CONNECTION_REFERENCE, refStr);
Packit 1fb8d4
Packit 1fb8d4
            Intent bookmarkIntent = new Intent(this.getApplicationContext(), BookmarkActivity.class);
Packit 1fb8d4
            bookmarkIntent.putExtras(bundle);
Packit 1fb8d4
            startActivity(bookmarkIntent);
Packit 1fb8d4
        }
Packit 1fb8d4
Packit 1fb8d4
        // load views
Packit 1fb8d4
        clearTextButton = (Button) findViewById(R.id.clear_search_btn);
Packit 1fb8d4
        superBarEditText = (EditText) findViewById(R.id.superBarEditText);
Packit 1fb8d4
Packit 1fb8d4
        listViewBookmarks = (ListView) findViewById(R.id.listViewBookmarks);
Packit 1fb8d4
Packit 1fb8d4
        // set listeners for the list view
Packit 1fb8d4
        listViewBookmarks.setOnItemClickListener(new AdapterView.OnItemClickListener() {
Packit 1fb8d4
            public void onItemClick(AdapterView parent, View view, int position, long id) {
Packit 1fb8d4
                String curSection = separatedListAdapter.getSectionForPosition(position);
Packit 1fb8d4
                Log.v(TAG, "Clicked on item id " + separatedListAdapter.getItemId(position) + " in section " + curSection);
Packit 1fb8d4
                if (curSection == sectionLabelBookmarks) {
Packit 1fb8d4
                    String refStr = view.getTag().toString();
Packit 1fb8d4
                    if (ConnectionReference.isManualBookmarkReference(refStr) ||
Packit 1fb8d4
                            ConnectionReference.isHostnameReference(refStr)) {
Packit 1fb8d4
                        Bundle bundle = new Bundle();
Packit 1fb8d4
                        bundle.putString(SessionActivity.PARAM_CONNECTION_REFERENCE, refStr);
Packit 1fb8d4
Packit 1fb8d4
                        Intent sessionIntent = new Intent(view.getContext(), SessionActivity.class);
Packit 1fb8d4
                        sessionIntent.putExtras(bundle);
Packit 1fb8d4
                        startActivity(sessionIntent);
Packit 1fb8d4
Packit 1fb8d4
                        // clear any search text
Packit 1fb8d4
                        superBarEditText.setText("");
Packit 1fb8d4
                        superBarEditText.clearFocus();
Packit 1fb8d4
                    } else if (ConnectionReference.isPlaceholderReference(refStr)) {
Packit 1fb8d4
                        // is this the add bookmark placeholder?
Packit 1fb8d4
                        if (ConnectionReference.getPlaceholder(refStr).equals(ADD_BOOKMARK_PLACEHOLDER)) {
Packit 1fb8d4
                            Intent bookmarkIntent = new Intent(view.getContext(), BookmarkActivity.class);
Packit 1fb8d4
                            startActivity(bookmarkIntent);
Packit 1fb8d4
                        }
Packit 1fb8d4
                    }
Packit 1fb8d4
                }
Packit 1fb8d4
            }
Packit 1fb8d4
        });
Packit 1fb8d4
Packit 1fb8d4
        listViewBookmarks.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
Packit 1fb8d4
            @Override
Packit 1fb8d4
            public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
Packit 1fb8d4
                // if the selected item is not a session item (tag == null) and not a quick connect entry
Packit 1fb8d4
                // (not a hostname connection reference) inflate the context menu
Packit 1fb8d4
                View itemView = ((AdapterContextMenuInfo) menuInfo).targetView;
Packit 1fb8d4
                String refStr = itemView.getTag() != null ? itemView.getTag().toString() : null;
Packit 1fb8d4
                if (refStr != null && !ConnectionReference.isHostnameReference(refStr) && !ConnectionReference.isPlaceholderReference(refStr)) {
Packit 1fb8d4
                    getMenuInflater().inflate(R.menu.bookmark_context_menu, menu);
Packit 1fb8d4
                    menu.setHeaderTitle(getResources().getString(R.string.menu_title_bookmark));
Packit 1fb8d4
                }
Packit 1fb8d4
            }
Packit 1fb8d4
        });
Packit 1fb8d4
Packit 1fb8d4
        superBarEditText.addTextChangedListener(new SuperBarTextWatcher());
Packit 1fb8d4
Packit 1fb8d4
        clearTextButton.setOnClickListener(new OnClickListener() {
Packit 1fb8d4
            @Override
Packit 1fb8d4
            public void onClick(View v) {
Packit 1fb8d4
                superBarEditText.setText("");
Packit 1fb8d4
            }
Packit 1fb8d4
        });
Packit 1fb8d4
    }
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
    @Override
Packit 1fb8d4
    public void onConfigurationChanged(Configuration newConfig) {
Packit 1fb8d4
        // ignore orientation/keyboard change
Packit 1fb8d4
        super.onConfigurationChanged(newConfig);
Packit 1fb8d4
        mDecor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
Packit 1fb8d4
    }
Packit 1fb8d4
Packit 1fb8d4
    @Override
Packit 1fb8d4
    public boolean onSearchRequested() {
Packit 1fb8d4
        superBarEditText.requestFocus();
Packit 1fb8d4
        return true;
Packit 1fb8d4
    }
Packit 1fb8d4
Packit 1fb8d4
    @Override
Packit 1fb8d4
    public boolean onContextItemSelected(MenuItem aItem) {
Packit 1fb8d4
Packit 1fb8d4
        // get connection reference
Packit 1fb8d4
        AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) aItem.getMenuInfo();
Packit 1fb8d4
        String refStr = menuInfo.targetView.getTag().toString();
Packit 1fb8d4
Packit 1fb8d4
        // refer to http://tools.android.com/tips/non-constant-fields why we can't use switch/case here ..
Packit 1fb8d4
        int itemId = aItem.getItemId();
Packit 1fb8d4
        if (itemId == R.id.bookmark_connect) {
Packit 1fb8d4
            Bundle bundle = new Bundle();
Packit 1fb8d4
            bundle.putString(SessionActivity.PARAM_CONNECTION_REFERENCE, refStr);
Packit 1fb8d4
            Intent sessionIntent = new Intent(this, SessionActivity.class);
Packit 1fb8d4
            sessionIntent.putExtras(bundle);
Packit 1fb8d4
Packit 1fb8d4
            startActivity(sessionIntent);
Packit 1fb8d4
            return true;
Packit 1fb8d4
        } else if (itemId == R.id.bookmark_edit) {
Packit 1fb8d4
            Bundle bundle = new Bundle();
Packit 1fb8d4
            bundle.putString(BookmarkActivity.PARAM_CONNECTION_REFERENCE, refStr);
Packit 1fb8d4
Packit 1fb8d4
            Intent bookmarkIntent = new Intent(this.getApplicationContext(), BookmarkActivity.class);
Packit 1fb8d4
            bookmarkIntent.putExtras(bundle);
Packit 1fb8d4
            startActivity(bookmarkIntent);
Packit 1fb8d4
            return true;
Packit 1fb8d4
        } else if (itemId == R.id.bookmark_delete) {
Packit 1fb8d4
            if (ConnectionReference.isManualBookmarkReference(refStr)) {
Packit 1fb8d4
                long id = ConnectionReference.getManualBookmarkId(refStr);
Packit 1fb8d4
                GlobalApp.getManualBookmarkGateway().delete(id);
Packit 1fb8d4
                manualBookmarkAdapter.remove(id);
Packit 1fb8d4
                separatedListAdapter.notifyDataSetChanged();
Packit 1fb8d4
            } else {
Packit 1fb8d4
                assert false;
Packit 1fb8d4
            }
Packit 1fb8d4
Packit 1fb8d4
            // clear super bar text
Packit 1fb8d4
            superBarEditText.setText("");
Packit 1fb8d4
            return true;
Packit 1fb8d4
        }
Packit 1fb8d4
Packit 1fb8d4
        return false;
Packit 1fb8d4
    }
Packit 1fb8d4
Packit 1fb8d4
    @Override
Packit 1fb8d4
    protected void onResume() {
Packit 1fb8d4
        super.onResume();
Packit 1fb8d4
        Log.v(TAG, "HomeActivity.onResume");
Packit 1fb8d4
Packit 1fb8d4
        // create bookmark cursor adapter
Packit 1fb8d4
        manualBookmarkAdapter = new BookmarkArrayAdapter(this, R.layout.bookmark_list_item, GlobalApp.getManualBookmarkGateway().findAll());
Packit 1fb8d4
Packit 1fb8d4
        // add add bookmark item to manual adapter
Packit 1fb8d4
        manualBookmarkAdapter.insert(addBookmarkPlaceholder, 0);
Packit 1fb8d4
Packit 1fb8d4
        // attach all adapters to the separatedListView adapter and assign it to the list view
Packit 1fb8d4
        separatedListAdapter = new SeparatedListAdapter(this);
Packit 1fb8d4
        separatedListAdapter.addSection(sectionLabelBookmarks, manualBookmarkAdapter);
Packit 1fb8d4
        listViewBookmarks.setAdapter(separatedListAdapter);
Packit 1fb8d4
Packit 1fb8d4
        // if we have a filter text entered cause an update to be caused here
Packit 1fb8d4
        String filter = superBarEditText.getText().toString();
Packit 1fb8d4
        if (filter.length() > 0)
Packit 1fb8d4
            superBarEditText.setText(filter);
Packit 1fb8d4
    }
Packit 1fb8d4
Packit 1fb8d4
    @Override
Packit 1fb8d4
    protected void onPause() {
Packit 1fb8d4
        super.onPause();
Packit 1fb8d4
        Log.v(TAG, "HomeActivity.onPause");
Packit 1fb8d4
Packit 1fb8d4
        // reset adapters
Packit 1fb8d4
        listViewBookmarks.setAdapter(null);
Packit 1fb8d4
        separatedListAdapter = null;
Packit 1fb8d4
        manualBookmarkAdapter = null;
Packit 1fb8d4
    }
Packit 1fb8d4
Packit 1fb8d4
    @Override
Packit 1fb8d4
    public void onBackPressed() {
Packit 1fb8d4
        // if back was pressed - ask the user if he really wants to exit
Packit 1fb8d4
        if (ApplicationSettingsActivity.getAskOnExit(this)) {
Packit 1fb8d4
            final CheckBox cb = new CheckBox(this);
Packit 1fb8d4
            cb.setChecked(!ApplicationSettingsActivity.getAskOnExit(this));
Packit 1fb8d4
            cb.setText(R.string.dlg_dont_show_again);
Packit 1fb8d4
Packit 1fb8d4
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
Packit 1fb8d4
            builder.setTitle(R.string.dlg_title_exit)
Packit 1fb8d4
                    .setMessage(R.string.dlg_msg_exit)
Packit 1fb8d4
                    .setView(cb)
Packit 1fb8d4
                    .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
Packit 1fb8d4
                        public void onClick(DialogInterface dialog, int which) {
Packit 1fb8d4
                            finish();
Packit 1fb8d4
                        }
Packit 1fb8d4
                    })
Packit 1fb8d4
                    .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
Packit 1fb8d4
                        public void onClick(DialogInterface dialog, int which) {
Packit 1fb8d4
                            dialog.dismiss();
Packit 1fb8d4
                        }
Packit 1fb8d4
                    })
Packit 1fb8d4
                    .create()
Packit 1fb8d4
                    .show();
Packit 1fb8d4
        } else {
Packit 1fb8d4
            super.onBackPressed();
Packit 1fb8d4
        }
Packit 1fb8d4
    }
Packit 1fb8d4
Packit 1fb8d4
    @Override
Packit 1fb8d4
    protected void onSaveInstanceState(Bundle outState) {
Packit 1fb8d4
        super.onSaveInstanceState(outState);
Packit 1fb8d4
        outState.putString(PARAM_SUPERBAR_TEXT, superBarEditText.getText().toString());
Packit 1fb8d4
    }
Packit 1fb8d4
Packit 1fb8d4
    @Override
Packit 1fb8d4
    protected void onRestoreInstanceState(Bundle inState) {
Packit 1fb8d4
        super.onRestoreInstanceState(inState);
Packit 1fb8d4
        superBarEditText.setText(inState.getString(PARAM_SUPERBAR_TEXT));
Packit 1fb8d4
    }
Packit 1fb8d4
Packit 1fb8d4
    @Override
Packit 1fb8d4
    public boolean onCreateOptionsMenu(Menu menu) {
Packit 1fb8d4
        MenuInflater inflater = getMenuInflater();
Packit 1fb8d4
        inflater.inflate(R.menu.home_menu, menu);
Packit 1fb8d4
        return true;
Packit 1fb8d4
    }
Packit 1fb8d4
Packit 1fb8d4
    @Override
Packit 1fb8d4
    public boolean onOptionsItemSelected(MenuItem item) {
Packit 1fb8d4
Packit 1fb8d4
        // refer to http://tools.android.com/tips/non-constant-fields why we can't use switch/case here ..
Packit 1fb8d4
        int itemId = item.getItemId();
Packit 1fb8d4
        if (itemId == R.id.newBookmark) {
Packit 1fb8d4
            Intent bookmarkIntent = new Intent(this, BookmarkActivity.class);
Packit 1fb8d4
            startActivity(bookmarkIntent);
Packit 1fb8d4
        } else if (itemId == R.id.appSettings) {
Packit 1fb8d4
            Intent settingsIntent = new Intent(this, ApplicationSettingsActivity.class);
Packit 1fb8d4
            startActivity(settingsIntent);
Packit 1fb8d4
        } else if (itemId == R.id.help) {
Packit 1fb8d4
            Intent helpIntent = new Intent(this, HelpActivity.class);
Packit 1fb8d4
            startActivity(helpIntent);
Packit 1fb8d4
        } else if (itemId == R.id.about) {
Packit 1fb8d4
            Intent aboutIntent = new Intent(this, AboutActivity.class);
Packit 1fb8d4
            startActivity(aboutIntent);
Packit 1fb8d4
        }
Packit 1fb8d4
Packit 1fb8d4
        return true;
Packit 1fb8d4
    }
Packit 1fb8d4
Packit 1fb8d4
    private class SuperBarTextWatcher implements TextWatcher {
Packit 1fb8d4
        @Override
Packit 1fb8d4
        public void afterTextChanged(Editable s) {
Packit 1fb8d4
            if (separatedListAdapter != null) {
Packit 1fb8d4
                String text = s.toString();
Packit 1fb8d4
                if (text.length() > 0) {
Packit 1fb8d4
                    ArrayList<BookmarkBase> computers_list = GlobalApp.getQuickConnectHistoryGateway().findHistory(text);
Packit 1fb8d4
                    computers_list.addAll(GlobalApp.getManualBookmarkGateway().findByLabelOrHostnameLike(text));
Packit 1fb8d4
                    manualBookmarkAdapter.replaceItems(computers_list);
Packit 1fb8d4
                    QuickConnectBookmark qcBm = new QuickConnectBookmark();
Packit 1fb8d4
                    qcBm.setLabel(text);
Packit 1fb8d4
                    qcBm.setHostname(text);
Packit 1fb8d4
                    manualBookmarkAdapter.insert(qcBm, 0);
Packit 1fb8d4
                } else {
Packit 1fb8d4
                    manualBookmarkAdapter.replaceItems(GlobalApp.getManualBookmarkGateway().findAll());
Packit 1fb8d4
                    manualBookmarkAdapter.insert(addBookmarkPlaceholder, 0);
Packit 1fb8d4
                }
Packit 1fb8d4
Packit 1fb8d4
                separatedListAdapter.notifyDataSetChanged();
Packit 1fb8d4
            }
Packit 1fb8d4
        }
Packit 1fb8d4
Packit 1fb8d4
        @Override
Packit 1fb8d4
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
Packit 1fb8d4
        }
Packit 1fb8d4
Packit 1fb8d4
        @Override
Packit 1fb8d4
        public void onTextChanged(CharSequence s, int start, int before, int count) {
Packit 1fb8d4
        }
Packit 1fb8d4
    }
Packit 1fb8d4
}