Android Open Source - androiddevice.info Main Activity






From Project

Back to project page androiddevice.info.

License

The source code is released under:

GNU General Public License

If you think the Android project androiddevice.info listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package info.androiddevice.deviceinventory.submission;
//  ww w  .  j a  va 2s  .  c om
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
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.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import com.squareup.okhttp.Callback;
import com.squareup.okhttp.FormEncodingBuilder;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;

import info.androiddevice.deviceinventory.Application;
import info.androiddevice.deviceinventory.DeviceInformation;

public class MainActivity extends ActionBarActivity implements AdapterView.OnItemClickListener {
    private SharedPreferences settings = Application.getContext().getSharedPreferences("inventory", MODE_PRIVATE);
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerOptions;
    private ActionBarDrawerToggle mDrawerToggle;
    private ListView mListView;
    private DeviceInformationListAdapter mInfoAdapter;
    private AlertDialog mAlertDialog;
    private String mDeviceName;
    OkHttpClient client = new OkHttpClient();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
        mDrawerOptions = (ListView) findViewById(R.id.left_drawer);

        mListView = (ListView) findViewById(R.id.container);
        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                if(position == 0){
                   showDeviceNameInputDialog();

                } else {
                    final TextView value = ((TextView) view.findViewById(android.R.id.text2));
                    if (value.getVisibility() != View.GONE) {
                        if (value.getEllipsize() == TextUtils.TruncateAt.END) {
                            value.setMaxLines(Integer.MAX_VALUE);
                            value.setEllipsize(null);
                        } else {
                            value.setMaxLines(DeviceInformationListAdapter.MAX_LINES);
                            value.setEllipsize(TextUtils.TruncateAt.END);
                        }
                    }
                }
            }
        });
        initNavigationDrawer();

        getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.black_background));


    }

    /**
     * Creates and displays a dialog for the user to enter his or her device name
     */
    private void showDeviceNameInputDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        final AlertDialog dialog = builder.setView(LayoutInflater.from(MainActivity.this)
                .inflate(R.layout.device_name_input, null, false))
                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        EditText editText = (EditText) ((AlertDialog)dialog).findViewById(R.id.editable);
                        mDeviceName = editText.getText().toString();
                        mInfoAdapter.setDeviceName(mDeviceName);
                        settings.edit().putString("deviceName", mDeviceName).commit();
                    }
                })
                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                }).create();
        dialog.show();
        buttonStyleHelper(dialog.getButton(DialogInterface.BUTTON_NEGATIVE));
        final Button positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
        EditText editText = (EditText) dialog.findViewById(R.id.editable);
        if(null == mDeviceName || 0 == mDeviceName.length()){
            positiveButton.setEnabled(false);
        } else {
            editText.setText(mDeviceName);
        }
        buttonStyleHelper(positiveButton);
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                positiveButton.setEnabled(count > 0);
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
        editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
                }
            }
        });
        editText.requestFocus();
    }

    private void buttonStyleHelper(Button b){
        b.setBackgroundResource(R.drawable.black_background_state);
        b.setTextColor(getResources().getColor(android.R.color.white));
    }

    @Override
    protected void onResume() {
        super.onResume();
        JSONObject deviceInformation = DeviceInformation.getInstance().getDeviceInformation();
        mInfoAdapter = new DeviceInformationListAdapter(MainActivity.this, deviceInformation);
        mDeviceName = settings.getString("deviceName", null);
        mInfoAdapter.setDeviceName(mDeviceName);
        mListView.setAdapter(mInfoAdapter);

        if(!hasBeenSubmitted()) {
            Boolean autoSubmit;
            try {
                ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo(this.getPackageName(), PackageManager.GET_META_DATA);
                autoSubmit = applicationInfo.metaData.getBoolean("auto_submit", false);
            } catch (PackageManager.NameNotFoundException e) {
                autoSubmit = false;
            } catch (NullPointerException e) {
                autoSubmit = false;
            }

            if(autoSubmit) {
                submit();
            }
        }
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
         if(item.getItemId() == android.R.id.home){
            if(mDrawerLayout.isDrawerOpen(mDrawerOptions)){
                mDrawerLayout.closeDrawers();
            } else{
                mDrawerLayout.openDrawer(mDrawerOptions);
            }
            return true;
        } else if(item.getItemId() == R.id.send){
             submit();
         }
        return super.onOptionsItemSelected(item);
    }

    private void initNavigationDrawer(){
        mDrawerToggle = new ActionBarDrawerToggle(
                this,                  /* host Activity */
                mDrawerLayout,         /* DrawerLayout object */
                R.drawable.ic_drawer,  /* nav drawer icon */
                0, /* "open drawer" description */
                0  /* "close drawer" description */
        ) {

            /** Called when a drawer has settled in a completely closed state. */
            public void onDrawerClosed(View view) {
                supportInvalidateOptionsMenu();
            }

            /** Called when a drawer has settled in a completely open state. */
            public void onDrawerOpened(View drawerView) {
                drawerView.bringToFront();
                supportInvalidateOptionsMenu();
            }
        };


        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
                R.layout.list_item, new String[]{getString(R.string.action_about), getString(R.string.action_send)});

        mDrawerOptions.setAdapter(adapter);
        mDrawerOptions.setOnItemClickListener(MainActivity.this);

        mDrawerToggle.setDrawerIndicatorEnabled(true);
        mDrawerLayout.setDrawerListener(mDrawerToggle);
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, Gravity.LEFT);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
    }

    private synchronized void submit() {
        LinearLayout alertLayout = (LinearLayout)LayoutInflater.from(MainActivity.this).inflate(R.layout.sending_alert,null);
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setCancelable(false).setView(alertLayout).setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        mAlertDialog = builder.show();
        //Button isn't null after show
        Button button = mAlertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
        button.setBackgroundResource(R.drawable.black_background_state);
        button.setTextColor(MainActivity.this.getResources().getColor(android.R.color.white));

        if(hasBeenSubmitted()) {
            ((TextView)mAlertDialog.findViewById(android.R.id.text1)).setText(R.string.alreadySent);
            mAlertDialog.findViewById(R.id.sending_progressbar).setVisibility(View.GONE);
            button.setEnabled(true);
        } else {
            button.setEnabled(false);

            final JSONObject deviceInformation = DeviceInformation.getInstance().getDeviceInformation();
            if(null != mDeviceName && 0 != mDeviceName.length()) {
                try {
                    deviceInformation.put("name", mDeviceName);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            RequestBody formBody = new FormEncodingBuilder().add("device", deviceInformation.toString()).build();
            Request request = new Request.Builder().url(getString(R.string.submit)).addHeader("User-Agent", "APP").post(formBody).build();
            client.newCall(request).enqueue(new HTTPCallback(this.getApplication()));
        }
    }

    protected void submitted(boolean successful) {
        mAlertDialog.findViewById(R.id.sending_progressbar).setVisibility(View.GONE);
        if(successful) {
            ((TextView)mAlertDialog.findViewById(android.R.id.text1)).setText(R.string.success);
            setBeenSubmitted(true);
        } else {
            ((TextView)mAlertDialog.findViewById(android.R.id.text1)).setText(R.string.failure);
            setBeenSubmitted(false);
        }
        Button button = mAlertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
        button.setEnabled(true);
    }

    private void about() {
        Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.about)));
        startActivity(myIntent);
    }

    protected boolean hasBeenSubmitted() {
        return settings.getBoolean("submitted", false);
    }

    protected void setBeenSubmitted(boolean value) {
        settings.edit().putBoolean("submitted", value).commit();
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if(position == 0) {
            about();
        } else if(position == 1) {
            submit();
        }
    }


    class HTTPCallback implements Callback {
        private Handler mainHandler;

        public HTTPCallback(Context context) {
            super();
            mainHandler = new Handler(context.getMainLooper());
        }


        @Override
        public void onFailure(Request request, IOException e) {
            mainHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        MainActivity.this.submitted(false);
                    }
                });
        }

        @Override
        public void onResponse(final Response response) {
            final boolean result = response.isSuccessful();
            mainHandler.post(new Runnable() {
                @Override
                public void run() {
                    MainActivity.this.submitted(result);
                }
            });
        }
    }

}




Java Source Code List

android.system.ErrnoException.java
android.system.Os.java
android.system.StructStat.java
info.androiddevice.deviceinventory.Application.java
info.androiddevice.deviceinventory.DeviceInformation.java
info.androiddevice.deviceinventory.Error.java
info.androiddevice.deviceinventory.info.CpuinfoProperty.java
info.androiddevice.deviceinventory.info.DirProperty.java
info.androiddevice.deviceinventory.info.DisplayProperty.java
info.androiddevice.deviceinventory.info.EnvironmentProperty.java
info.androiddevice.deviceinventory.info.FeaturesProperty.java
info.androiddevice.deviceinventory.info.FileProperty.java
info.androiddevice.deviceinventory.info.GetPropProperty.java
info.androiddevice.deviceinventory.info.JavaSystemProperty.java
info.androiddevice.deviceinventory.info.MeminfoProperty.java
info.androiddevice.deviceinventory.info.MountsProperty.java
info.androiddevice.deviceinventory.info.NameProperty.java
info.androiddevice.deviceinventory.info.OtacertsProperty.java
info.androiddevice.deviceinventory.info.PackageSigProperty.java
info.androiddevice.deviceinventory.info.Property.java
info.androiddevice.deviceinventory.info.SharedLibraryNamesProperty.java
info.androiddevice.deviceinventory.info.UsbProperty.java
info.androiddevice.deviceinventory.info.Utils.java
info.androiddevice.deviceinventory.info.VersionProperty.java
info.androiddevice.deviceinventory.submission.DeviceInformationListAdapter.java
info.androiddevice.deviceinventory.submission.MainActivity.java
libcore.io.ErrnoException.java
libcore.io.Libcore.java
libcore.io.Os.java
libcore.io.StructStat.java
name.unused.android.utils.systemproperties.SystemProperty.java
name.unused.android.utils.systemproperties.exception.NoSuchPropertyException.java