Search in sources :

Example 26 with SimpleItemAnimator

use of android.support.v7.widget.SimpleItemAnimator in project Roblu by wdavies973.

the class TeamsView method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_teams_view);
    io = new IO(getApplicationContext());
    // Initialize startup requirements
    // sets width for UI, needed for RMetricToUI
    Utils.initWidth(this);
    if (IO.init(getApplicationContext())) {
        // checks if we need to show startup dialog
        startActivity(new Intent(this, SetupActivity.class));
        finish();
        return;
    }
    // setup TBA api vars
    TBA.setID("Roblu", "Scouting-App", "v3");
    settings = io.loadSettings();
    /*
         * Setup UI
         */
    // Toolbar
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
        getSupportActionBar().setTitle("Roblu");
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
    }
    // Progress bar, also make sure to hide it
    bar = findViewById(R.id.progress_bar);
    bar.setVisibility(View.GONE);
    // Recycler View, UI front-end to teams array
    rv = findViewById(R.id.teams_recycler);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    rv.setLayoutManager(linearLayoutManager);
    ((SimpleItemAnimator) rv.getItemAnimator()).setSupportsChangeAnimations(false);
    // Setup the team adapter
    adapter = new TeamsRecyclerAdapter(this, this);
    rv.setAdapter(adapter);
    // Setup the UI gestures manager and link to recycler view
    ItemTouchHelper.Callback callback = new TeamsRecyclerTouchHelper(adapter);
    ItemTouchHelper helper = new ItemTouchHelper(callback);
    helper.attachToRecyclerView(rv);
    // Search view
    searchView = findViewById(R.id.search_view);
    searchView.setHintTextColor(Color.BLACK);
    searchView.setHint("Name, number, or match");
    // Search button
    searchButton = findViewById(R.id.fab);
    searchButton.setOnClickListener(this);
    searchButton.setOnLongClickListener(this);
    // Link the search button appearance to the scrolling behavior of the recycler view
    rv.addOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            if (dy > 0 && searchButton.isShown())
                searchButton.hide();
            if (dy < 0 && !searchButton.isShown())
                searchButton.show();
        }

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            if (newState == RecyclerView.SCROLL_STATE_IDLE)
                searchButton.show();
            super.onScrollStateChanged(recyclerView, newState);
        }
    });
    // If the user closes the search bar, refresh the teams view with all the original items
    searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() {

        @Override
        public void onSearchViewShown() {
        }

        @Override
        public void onSearchViewClosed() {
            executeLoadTeamsTask(lastFilter, false);
            searchButton.setVisibility(FloatingActionButton.VISIBLE);
        }
    });
    // Listen for text in the search view, if text is found, complete teh search
    searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {
            searchView.closeSearch();
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            lastQuery = newText;
            if (lastFilter == SORT_TYPE.CUSTOM_SORT)
                executeLoadTeamsTask(SORT_TYPE.CUSTOM_SORT, false);
            else
                executeLoadTeamsTask(SORT_TYPE.SEARCH, false);
            return true;
        }
    });
    // Make general changes to UI, keep it synced with RUI
    new UIHandler(this, toolbar, searchButton, true).update();
    // Reload last filter, custom sort, and query
    lastFilter = settings.getLastFilter();
    // custom sort or search can't be loaded at startup because lastQuery and lastCustomSortFilter aren't saved
    if (lastFilter == SORT_TYPE.CUSTOM_SORT || lastFilter == SORT_TYPE.SEARCH)
        lastFilter = SORT_TYPE.NUMERICAL;
    /*
         * Setup events drawer and load events to it
         */
    eventDrawerManager = new EventDrawerManager(this, toolbar, this);
    eventDrawerManager.selectEvent(settings.getLastEventID());
    // Check to see if the background service is running, if it isn't, start it
    serviceFilter = new IntentFilter();
    serviceFilter.addAction(Constants.SERVICE_ID);
    Log.d("RBS", "Is service running: " + Utils.isMyServiceRunning(getApplicationContext()));
    if (!Utils.isMyServiceRunning(getApplicationContext())) {
        Intent serviceIntent = new Intent(this, Service.class);
        startService(serviceIntent);
    }
    /*
         * Display update messages
         *
         */
    if (settings.getUpdateLevel() != Constants.VERSION) {
        settings.setUpdateLevel(Constants.VERSION);
        AlertDialog.Builder builder = new AlertDialog.Builder(TeamsView.this).setTitle("Changelist for Version 4.4.5").setMessage(Constants.UPDATE_MESSAGE).setPositiveButton("Rock on", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        AlertDialog dialog = builder.create();
        if (dialog.getWindow() != null) {
            dialog.getWindow().getAttributes().windowAnimations = settings.getRui().getDialogDirection();
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(settings.getRui().getBackground()));
        }
        dialog.show();
        dialog.getButton(Dialog.BUTTON_POSITIVE).setTextColor(settings.getRui().getAccent());
        io.saveSettings(settings);
    }
}
Also used : AlertDialog(android.app.AlertDialog) DialogInterface(android.content.DialogInterface) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) EventDrawerManager(com.cpjd.roblu.ui.events.EventDrawerManager) ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper) SetupActivity(com.cpjd.roblu.ui.setup.SetupActivity) Toolbar(android.support.v7.widget.Toolbar) IntentFilter(android.content.IntentFilter) SimpleItemAnimator(android.support.v7.widget.SimpleItemAnimator) UIHandler(com.cpjd.roblu.ui.UIHandler) IO(com.cpjd.roblu.io.IO) Intent(android.content.Intent) ColorDrawable(android.graphics.drawable.ColorDrawable) MaterialSearchView(com.miguelcatalan.materialsearchview.MaterialSearchView) RecyclerView(android.support.v7.widget.RecyclerView)

Example 27 with SimpleItemAnimator

use of android.support.v7.widget.SimpleItemAnimator in project Roblu by wdavies973.

the class FormViewer method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_create_form);
    /*
		 * Load dependencies
		 */
    /*
         Stores the user's UI preferences
        */
    RUI rui = new IO(getApplicationContext()).loadSettings().getRui();
    /*
		 * Setup UI
		 */
    // Toolbar
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle("Form editor");
        if (getIntent().getBooleanExtra("master", false))
            getSupportActionBar().setSubtitle("Master form");
    }
    // Bottom bar - selector that lets the user switch between PIT and MATCH forms
    BottomBar bBar = findViewById(R.id.bottomBar);
    bBar.setOnTabSelectListener(this);
    BottomBarTab tab = bBar.getTabAtPosition(0);
    BottomBarTab tab2 = bBar.getTabAtPosition(1);
    tab.setBarColorWhenSelected(rui.getPrimaryColor());
    tab2.setBarColorWhenSelected(rui.getPrimaryColor());
    bBar.selectTabAtPosition(0);
    // Add the "New metric" button
    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(this);
    // Recycler view setup
    RecyclerView rv = findViewById(R.id.movie_recycler_view);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    rv.setLayoutManager(linearLayoutManager);
    ((SimpleItemAnimator) rv.getItemAnimator()).setSupportsChangeAnimations(false);
    metricsAdapter = new FormRecyclerAdapter(this, this);
    rv.setAdapter(metricsAdapter);
    // Gesture helper
    ItemTouchHelper.Callback callback = new FormRecyclerTouchHelper(metricsAdapter);
    ItemTouchHelper helper = new ItemTouchHelper(callback);
    helper.attachToRecyclerView(rv);
    /*
         * Check to see if we received a form from a different class or
         * if we need to create a new one
         */
    if (getIntent().getSerializableExtra("form") != null) {
        form = (RForm) getIntent().getSerializableExtra("form");
    } else {
        RTextfield name = new RTextfield(0, "Team name", false, true, "");
        RTextfield number = new RTextfield(1, "Team number", true, true, "");
        ArrayList<RMetric> pit = new ArrayList<>();
        pit.add(name);
        pit.add(number);
        form = new RForm(pit, new ArrayList<RMetric>());
    }
    loadViews(true, 0);
    new UIHandler(this, toolbar, fab).update();
}
Also used : SimpleItemAnimator(android.support.v7.widget.SimpleItemAnimator) UIHandler(com.cpjd.roblu.ui.UIHandler) IO(com.cpjd.roblu.io.IO) RTextfield(com.cpjd.roblu.models.metrics.RTextfield) RUI(com.cpjd.roblu.models.RUI) ArrayList(java.util.ArrayList) RMetric(com.cpjd.roblu.models.metrics.RMetric) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper) BottomBar(com.roughike.bottombar.BottomBar) RForm(com.cpjd.roblu.models.RForm) BottomBarTab(com.roughike.bottombar.BottomBarTab) FloatingActionButton(android.support.design.widget.FloatingActionButton) RecyclerView(android.support.v7.widget.RecyclerView) Toolbar(android.support.v7.widget.Toolbar)

Example 28 with SimpleItemAnimator

use of android.support.v7.widget.SimpleItemAnimator in project Roblu by wdavies973.

the class MyMatches method onCreate.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // setup ui stuff
    setContentView(R.layout.mymatches);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null)
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // access the eventID, if no eventID is passed in to this class, the app will crash
    eventID = getIntent().getIntExtra("eventID", 0);
    // load the number from settings
    int number = new IO(getApplicationContext()).loadSettings().getTeamNumber();
    if (number == 0) {
        // the user hasn't changed their number yet, and since no team is #0, we have to stop the activity
        Toast.makeText(getApplicationContext(), "No team number found. Set it in settings.", Toast.LENGTH_LONG).show();
        setResult(Constants.CANCELLED);
        finish();
        return;
    }
    /*
         * we have a reference to the team's number but not the team'd ID (we need the team's ID to load).
         *
         * so the problem here is that there is a potential for the user to have created multiple teams with
         * their own team number (not likely, but possible). Currently, this code will just load the first
         * team that matches our number that it comes across, but you could modify this code to do a "smart select"
         * that looks of data contained within each team (num of matches, size, last edit, etc.). for now, the first
         * team we come across should be fine and work 99% of the time
         */
    RTeam[] local = new IO(getApplicationContext()).loadTeams(eventID);
    RTeam myTeam = null;
    for (RTeam team : local) {
        // search through locally stored teams until we find one that matches our number
        if (team.getNumber() == number) {
            myTeam = team;
            break;
        }
    }
    if (myTeam == null) {
        // team will be null if it was not contained in the event, if no team, force close this activity
        Toast.makeText(getApplicationContext(), "Your team is missing from event, please add it", Toast.LENGTH_LONG).show();
        setResult(Constants.CANCELLED);
        finish();
        return;
    }
    if (myTeam.getTabs() == null || myTeam.getTabs().size() <= 2) {
        // we found a team, but it doesn't contain any matches, so we can't load "my matches", force close
        Toast.makeText(getApplicationContext(), "Team does not contain any match data, please add some.", Toast.LENGTH_LONG).show();
        setResult(Constants.CANCELLED);
        finish();
        return;
    }
    // for more on verification, visit the RTeam class, basically, to be safe, we want to sync the form and the team before we play around with any of them
    myTeam.verify(new IO(getApplicationContext()).loadForm(eventID));
    // next, we need to split apart the RTab array within our team, we want one RCheckout model per match
    // we'll use this array for storing info, one RChecklist per match
    ArrayList<RCheckout> toSave = new ArrayList<>();
    for (int i = 0; i < myTeam.getTabs().size(); i++) {
        // we don't care about pit or predictions tabs, so skip them since they are always at index 0 & 1
        if (i < 2)
            continue;
        // create a new team with only one tab, wrap it in a checkout, and add it to our array
        RTeam team = new RTeam(myTeam.getName(), myTeam.getNumber(), myTeam.getID());
        team.addTab(myTeam.getTabs().get(i));
        toSave.add(new RCheckout(team));
    }
    // next, we need to look through our local teams list again and search for other teams in the same match as us, then we can add them to the either the teammates or opponents array
    for (RCheckout checkout : toSave) {
        ArrayList<RTeam> teammates = new ArrayList<>();
        ArrayList<RTeam> opponents = new ArrayList<>();
        for (RTeam team : local) {
            for (RTab tab : team.getTabs()) {
                if (tab.getTitle().equalsIgnoreCase(checkout.getTeam().getTabs().get(0).getTitle())) {
                    if (checkout.getTeam().getTabs().get(0).isRedAlliance() == tab.isRedAlliance())
                        teammates.add(team);
                    else
                        opponents.add(team);
                }
            }
        }
        checkout.getTeam().getTabs().get(0).setTeammates(teammates);
        checkout.getTeam().getTabs().get(0).setOpponents(opponents);
    }
    // we've got everything we need, let's load it into the UI
    rv = findViewById(R.id.recycler);
    // manages the layout loading
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    rv.setLayoutManager(linearLayoutManager);
    adapter = new CheckoutsViewAdapter(getApplicationContext(), new IO(getApplicationContext()).loadSettings());
    adapter.setCheckouts(toSave);
    adapter.setListener(this);
    rv.setAdapter(adapter);
    // prevents a weird rendering issues
    ((SimpleItemAnimator) rv.getItemAnimator()).setSupportsChangeAnimations(false);
    // don't forget to sync our activity ui with the RUI settings
    new UIHandler(this, toolbar).update();
}
Also used : SimpleItemAnimator(android.support.v7.widget.SimpleItemAnimator) RTeam(com.cpjd.roblu.models.RTeam) UIHandler(com.cpjd.roblu.ui.UIHandler) RTab(com.cpjd.roblu.models.RTab) IO(com.cpjd.roblu.io.IO) ArrayList(java.util.ArrayList) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) RCheckout(com.cpjd.roblu.models.RCheckout) Toolbar(android.support.v7.widget.Toolbar)

Aggregations

SimpleItemAnimator (android.support.v7.widget.SimpleItemAnimator)28 RecyclerView (android.support.v7.widget.RecyclerView)24 LinearLayoutManager (android.support.v7.widget.LinearLayoutManager)22 View (android.view.View)16 TextView (android.widget.TextView)8 Toolbar (android.support.v7.widget.Toolbar)7 Nullable (android.support.annotation.Nullable)6 ItemTouchHelper (android.support.v7.widget.helper.ItemTouchHelper)6 UIHandler (com.cpjd.roblu.ui.UIHandler)5 Intent (android.content.Intent)4 BindView (butterknife.BindView)4 Context (android.content.Context)3 Bundle (android.os.Bundle)3 GridLayoutManager (android.support.v7.widget.GridLayoutManager)3 IO (com.cpjd.roblu.io.IO)3 DrawableItemDecoration (org.wikipedia.views.DrawableItemDecoration)3 PageItemView (org.wikipedia.views.PageItemView)3 SearchEmptyView (org.wikipedia.views.SearchEmptyView)3 Drawable (android.graphics.drawable.Drawable)2 FloatingActionButton (android.support.design.widget.FloatingActionButton)2