-1

I have a single card view that performs two functions: Start and Stop. When Start is pressed, the Start function begins and the txt changes to Stop and Lock Deactivated, as you can see in the if m(Started) statement below.

In the else statement, I need to call some method/function to change the color of the cardview to red, from its original color of green.

     public class LandingPage extends AppCompatActivity implements View.OnClickListener {


    private CardView appsCard, parentalControlsCard, customSettingsCard, activateCard, StartStopCard;
    private TextView lockStatus, processStatus;
    private AlarmManager alarmManager;
    private ArrayList<RuleSet> ruleSets = null;
    private boolean mStarted = false;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainactivity);
        lockStatus = (TextView) findViewById(R.id.onOff);
        processStatus = (TextView) findViewById(R.id.processStartStop);


        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        final Intent intent = new Intent(LandingPage.this, LockOptionReceiver.class);
        SharedPreferences setting = getSharedPreferences("PREFS", 0);
        String switcher = setting.getString("lockStatus", "");
        setStatus(switcher);
        String switcher2 = setting.getString("processStatus" , "");
        setProcess(switcher2);


        try {
            ruleSets = RuleSetList.retrieveRuleSet(this);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }


        //Defining Cards on Landing Page
        appsCard = (CardView) findViewById(R.id.apps_card);
        parentalControlsCard = (CardView) findViewById(R.id.parentalControls_id);
        customSettingsCard = (CardView) findViewById(R.id.customSettings);
        activateCard = (CardView) findViewById(R.id.activate_id);
        StartStopCard = (CardView) findViewById(R.id.StartStopCard);


        //Add OnClick Listeners
        appsCard.setOnClickListener(this);
        parentalControlsCard.setOnClickListener(this);
        customSettingsCard.setOnClickListener(this);
        activateCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (ruleSets.isEmpty()) {
                    Toast.makeText(LandingPage.this, "You did not create a custom setting.", Toast.LENGTH_SHORT).show();
                } else {
                    PendingIntent pending_start;
                    PendingIntent pending_stop;
                    Intent startIntent = new Intent(LandingPage.this, LockOptionReceiver.class);
                    Intent stopIntent = new Intent(LandingPage.this, LockOptionReceiver.class);
                    Calendar startTime = new GregorianCalendar();
                    Calendar endTime = new GregorianCalendar();
                    String startString = ruleSets.get(0).getStartTime();
                    String endString = ruleSets.get(0).getEndTime();

                    String[] startArr = startString.split(":");
                    String[] endArr = endString.split(":");

                    startTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startArr[0]));
                    startTime.set(Calendar.MINUTE, Integer.parseInt(startArr[1]));

                    endTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(endArr[0]));
                    endTime.set(Calendar.MINUTE, Integer.parseInt(endArr[1]));

                    pending_start = PendingIntent.getBroadcast(LandingPage.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                    pending_stop = PendingIntent.getBroadcast(LandingPage.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

                    startIntent.putExtra("status", "start");
                    stopIntent.putExtra("status", "stop");

                    Toast.makeText(LandingPage.this, "Your ruleset will start at " + startString, Toast.LENGTH_SHORT).show();

                    setStatus("Lock Active");
                    setProcess("Stop");

                    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, AlarmManager.INTERVAL_DAY, startTime.getTimeInMillis(), pending_start);
                    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, AlarmManager.INTERVAL_DAY, startTime.getTimeInMillis(), pending_stop);
                }
            }
        });


        final CardView StartStopCard = (CardView) findViewById(R.id.StartStopCard);
        StartStopCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mStarted) {
                    mStarted=false;
                    SharedPreferences setting = getSharedPreferences("PREFS", 0);
                    SharedPreferences.Editor editor = setting.edit();
                    editor.remove("switcher");
                    editor.remove("switcher2");
                    editor.remove("lockStatus");
                    editor.remove("processStatus");
                    editor.commit();
                    editor.putString("switcher", "true");
                    editor.putString("switcher2", "true");
                    editor.putString("lockStatus", "Lock Active");
                    editor.putString("processStatus", "Start");
                    editor.apply();
                    intent.putExtra("status", "start");
                    sendBroadcast(intent);
                    intent.putExtra("processStatus", "start");
                    sendBroadcast(intent);
                    String status = setting.getString("lockStatus", "");
                    setStatus(status);
                    String processStatus = setting.getString("processStatus" , "");
                    setProcess(processStatus);

                }
                else {

                    mStarted= true;
                    SharedPreferences setting = getSharedPreferences("PREFS", 0);
                    SharedPreferences.Editor editor = setting.edit();
                    editor.remove("switcher");
                    editor.remove("switcher2");
                    editor.remove("lockStatus");
                    editor.remove("processStatus");
                    editor.commit();
                    editor.putString("switcher", "false");
                    editor.putString("switcher2", "false");
                    editor.putString("lockStatus", "Lock Deactivated");
                    editor.putString("processStatus", "Stop");
                    editor.apply();
                    intent.putExtra("status", "stop");
                    sendBroadcast(intent);
                    intent.putExtra("processStatus", "start");
                    sendBroadcast(intent);
                    String status = setting.getString("lockStatus", "");
                    setStatus(status);
                    String processStatus = setting.getString("processStatus" , "");
                    setProcess(processStatus);
                    StartStopCard.setCardBackgroundColor(Color.parseColor("#b70505"));

                }
            }

        });

    }



    @Override
    public void onClick(View v) {

        Intent i;

        switch (v.getId()) {
            case R.id.apps_card:
                i = new Intent(this, AppList.class);
                startActivity(i);
                break;
            case R.id.parentalControls_id:
                i = new Intent(this, ParentalWelcomeActivity.class);
                startActivity(i);
                break;
            case R.id.customSettings:
                i = new Intent(this, ViewRuleSets.class);
                startActivity(i);
                break;
            case R.id.activate_id:
                i = new Intent(this, RuleSet.class);
                startActivity(i);
                break;
            default:
                break;

        }
    }



    private void setStatus(String s) {
        lockStatus.setText(s);
    }

    private void setProcess(String s) { processStatus.setText(s);}


    public void ruleSet(View view) {
        Intent intent = new Intent(this, ViewRuleSets.class);
        startActivity(intent);
    }


}
user12345
  • 55
  • 7

1 Answers1

0

setCardBackgroundColor takes color resource id as param not Color.parseColor("#b70505")

Define card_color in colors.xml like this

<color name="card_color">#FF4081</color>

Then Call StartStopCard.setCardBackgroundColor( ContextCompat.getColor(view.getContext(), R.color.card_color))

Vishu
  • 326
  • 2
  • 11
  • Pass activity/context reference instead of `this`. – Vishu Mar 06 '18 at 20:14
  • do you know how I would change the background color from inside the else statement? The above answer will not work inside the else – user12345 Mar 08 '18 at 22:00
  • It should work. May be some problem with the implementation. Can you update the question – Vishu Mar 09 '18 at 01:54
  • you haven't changed `StartStopCard.setCardBackgroundColor(Color.parseColor("#b70505"));`. Please change like mentioned above – Vishu Mar 09 '18 at 14:08
  • I am getting error saying "variable StartStopCard' is acessed from inner class, needs to be declared final" – user12345 Mar 09 '18 at 14:15
  • you have already defined that here `final CardView StartStopCard = (CardView) activity.findViewById(R.id.StartStopCard);`. can you cross check the code snippet. If something else is missing – Vishu Mar 09 '18 at 14:32
  • it makes perfect sense, however it still won't work. I think I will have to try go about changing the bg color the same way as I changed the string – user12345 Mar 09 '18 at 14:39